如何用Python在Amazon SES邮件中显示未缩写的POST值全称
实现方案
完全可以通过字典映射的方式完成套餐缩写到完整名称的转换,不需要调整现有DynamoDB存储结构,代码改动量很小。
具体实现步骤
- 定义映射字典
在代码中维护一份套餐缩写和展示名称的对应关系,和前端表单的选项保持一一对应即可,后续新增套餐只需要同步更新这个字典:
# 套餐缩写 -> 邮件展示完整名称 映射表 PACKAGE_MAP = { "ntw": "Networking Package", "drnk": "Drinks Package", "food": "Food Package" }
- 发送邮件前做值转换
在组装SES模板参数时,从字典中取出缩写对应的完整名称,加上兜底逻辑避免遇到未收录的缩写值导致程序报错。
额外提示:原代码用字符串拼接生成JSON参数的方式存在稳定性风险,如果用户名等字段包含双引号、反斜杠等特殊字符,会导致JSON格式解析失败,推荐用Python标准库json.dumps()自动完成特殊字符转义。
修改后的完整可运行代码如下:
import os import json PACKAGE_MAP = { "ntw": "Networking Package", "drnk": "Drinks Package", "food": "Food Package" } def send_email_matched(email1, name1, email2, name2, package, client): senderAddress = os.environ["senderAddress"] # 取完整套餐名,若映射不存在则兜底使用原始缩写值 display_package = PACKAGE_MAP.get(package, package) # 自动生成标准JSON格式模板参数,处理特殊字符转义 template_payload = { "first_name1": name1, "first_name2": name2, "package": display_package } response = client.send_templated_email( Source=senderAddress, Destination={ 'ToAddresses': [email1, email2], 'CcAddresses': [senderAddress] }, Template='XXXXXXX', TemplateData=json.dumps(template_payload) ) return response
可选优化
如果后续套餐选项迭代频繁,不想每次修改选项都重新部署代码,可以把这份映射关系存在独立的配置存储中,比如单独的DynamoDB配置表、AWS SSM参数存储,代码运行时拉取最新映射即可。
内容的提问来源于stack exchange,提问作者fhoskyns
相关产品推荐
相关产品推荐

