AWS SES通过SNSAction推送至SNS时无法获取完整原始邮件怎么办
解决方法
你当前拿不到完整邮件内容的核心原因是SES SNS Action的默认通知编码配置仅返回邮件头,调整配置即可解决:
操作步骤
- 进入AWS SES控制台,找到你配置的收件规则集,编辑对应规则下的SNS Action
- 将「通知编码(Notification encoding)」选项从默认的
UTF-8修改为Base64 - 保存规则后等待配置生效即可
后续内容处理
配置调整完成后,SNS推送到你HTTPS端点的消息中会新增content字段,该字段为Base64编码的完整原始EML格式邮件:
- 对
content字段做Base64解码即可拿到完整原始邮件,包含所有收件人信息、邮件正文、附件等全部内容 - 你需要的
to地址可以直接从解码后EML的头部字段提取,也可以直接使用原有通知中commonHeaders下的to数组(该字段现有配置下即可正常获取) - 邮件正文可以借助通用的邮件解析库(如Python内置
email库、Node.jsmailparser包等),直接从解码后的EML中提取text/plain(纯文本正文)或text/html(富文本正文)对应部分的内容,无需手动解析格式
备选方案(适合需长期存储邮件的场景)
如果不想处理Base64编码内容,你也可以在SES规则中先添加S3存储Action,将完整邮件存入S3桶,再触发SNS通知,通知中会携带对应S3对象的存储路径,你收到通知后再从S3拉取完整邮件文件即可,该方案需要额外配置SES对S3桶的写入权限。
内容的提问来源于stack exchange,提问作者rotor155
相关产品推荐
相关产品推荐

