You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AWS SES发送/退回邮件副本存储到S3或CloudWatch日志?

解决方案:捕获并存储SES邮件副本及事件到S3/CloudWatch

以下是两种可行的实现途径,针对你需要存储已发送/退回邮件的需求:

1. 使用SES配置集(Configuration Sets)实现原生存储与事件捕获

这是AWS官方推荐的方案,无需修改太多业务代码,直接通过SES的配置集完成邮件副本存储和事件收集:

步骤1:创建SES配置集并添加操作

  • 添加S3存储操作:
    在配置集中创建「存储操作」,指定目标S3桶。此操作会将你通过SES发送的所有邮件(完整标头、正文)以原始格式存储到S3。需要确保:
    • S3桶的权限策略允许SES服务主体(ses.amazonaws.com)执行PutObject操作
    • 给SES关联的IAM角色授予S3写入权限
  • 添加事件发布操作:
    配置将SES事件(包括发送成功、退回、投诉等)发布到SNS主题。针对退回邮件,事件中会包含退回原因、收件人、原始邮件的MessageId等关键信息。

步骤2:调用SES API时指定配置集

在调用SendEmail或SendRawEmailAPI时,必须在请求参数中加入ConfigurationSetName,否则配置集的操作不会触发。示例代码片段(Python):

import boto3

ses_client = boto3.client('ses')
response = ses_client.send_email(
    Source='sender@example.com',
    Destination={'ToAddresses': ['recipient@example.com']},
    Message={...},
    ConfigurationSetName='your-config-set-name'  # 必须指定
)

步骤3:处理退回事件(可选)

如果需要将退回事件的详情和原始邮件关联存储:

  • 给SNS主题订阅Lambda函数,Lambda读取SNS消息中的退回事件数据,结合S3中存储的原始邮件(通过MessageId关联),将整合后的内容写入S3或CloudWatch日志。

2. 应用层结合Lambda主动存储

如果无法使用配置集(比如业务场景限制),可以在调用SES API前,先主动将邮件内容存储到S3:

  • 在你的网站代码中,调用SES API前,将邮件的标头、正文序列化后写入S3桶
  • 同时配置SES事件发布到SNS,Lambda订阅SNS后,将退回事件与S3中存储的对应邮件关联,补充存储到S3或写入CloudWatch日志

关键注意事项

  • CloudTrail确实可以记录SES的SendEmail/SendRawEmailAPI调用,但仅记录请求参数的元数据,不会包含完整的邮件正文,因此无法满足你的需求
  • 配置集的S3存储仅保留已发送的邮件副本,退回事件的详情需要通过SNS+Lambda补充捕获和存储
  • 确保S3桶开启版本控制(可选),避免邮件副本被意外覆盖

内容的提问来源于stack exchange,提问作者Budianto IP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:00:04