Amazon SES sendTemplatedEmail无送达问题排查求助
看起来你已经把基础配置都搞定了,但遇到了模板渲染失败的坑——返回了消息ID却没收到邮件,CloudWatch只给了个RenderingFailure的提示,确实挺头疼的。我给你梳理几个针对性的排查步骤:
深挖CloudWatch的详细错误日志
有时候默认的日志可能没输出完整的渲染错误细节,你可以试试用CloudWatch Insights来精准查询:fields @timestamp, @message | filter @message like /RenderingFailure/ | sort @timestamp desc另外要确认你已经在SES控制台开启了完整的发送事件日志:进入SES控制台 → 左侧“配置” → “事件发布”,检查是否勾选了“发送”、“渲染失败”等事件,并关联到正确的CloudWatch日志组。如果之前没开全,开启后再测试一次,应该能拿到更具体的错误信息(比如模板语法错误、变量缺失之类的)。
手动验证模板渲染逻辑
RenderingFailure本质是模板和传入的数据无法正确生成邮件内容,你可以直接在SES控制台测试模板:- 进入SES控制台 → 左侧“电子邮件模板”
- 找到你的模板,点击“测试模板”
- 填入和你调用
sendTemplatedEmail时完全一致的TemplateDataJSON内容 - 点击“预览”,看看能不能正常生成邮件内容
如果这里预览失败,直接就能看到模板的问题——比如Handlebars语法错误(比如未闭合的{{/if}}、错误的循环语法)、变量名拼写不匹配(SES模板变量是大小写敏感的!)。
检查TemplateData的JSON格式正确性
很多时候渲染失败是因为TemplateData不是有效的JSON:比如引号不匹配、末尾多了逗号、变量值没转义(比如包含双引号的字符串没加反斜杠)。你可以把你的TemplateData复制到本地JSON校验工具里确认格式完全正确。确认沙箱环境的收件人限制
虽然你说已经验证了邮箱,但沙箱环境下只能发送到已验证的收件邮箱和发件人自身邮箱。不过如果是渲染失败的话,邮件根本没进入发送流程,所以统计里没记录,但还是要确认你测试的收件人都是已验证的,避免混淆问题。另外,就算渲染成功,沙箱里的邮件也可能被邮箱服务商扔进垃圾邮件,记得检查垃圾邮件文件夹。检查IAM权限与模板访问权限
虽然你拿到了消息ID,但还是要确认调用sendTemplatedEmail的IAM角色/用户是否有ses:SendTemplatedEmail权限,并且能访问你指定的模板。可以检查IAM策略里是否包含了对应的资源(比如arn:aws:ses:区域:账号ID:template/你的模板名)。查看SES控制台的失败记录
进入SES控制台 → 左侧“已发送邮件”,看看有没有对应的发送记录。如果有,点击进去查看“失败原因”,这里往往会给出比CloudWatch更直接的渲染错误描述。
按照这些步骤排查,应该能定位到具体的问题——大概率是模板语法或者TemplateData的格式问题,毕竟RenderingFailure几乎都是模板渲染环节出了错。
内容的提问来源于stack exchange,提问作者shredding

