Amazon SES:如何避免重复发件并配置重复发送触发告警
实现Amazon SES重复发送告警与自动暂停方案
完全可行,你可以通过SES的事件追踪能力结合Lambda、CloudWatch/DynamoDB来实现这个需求,具体步骤如下:
1. 开启邮件发送事件追踪
- 配置SES的配置集(Configuration Sets),启用
Send事件捕获,确保每条邮件发送记录包含收件邮箱、邮件唯一标识(Message ID),建议发送邮件时添加自定义头(如X-Request-ID)来标记同一业务请求的邮件,避免误判正常多发场景。 - 将事件导出到CloudWatch Logs或DynamoDB:
- 选CloudWatch的话,创建日志组并将配置集的事件目的地指向该组;
- 选DynamoDB的话,直接在配置集里设置事件目的地为DynamoDB表,存储邮箱、发送时间、自定义业务ID等核心字段。
2. 编写重复检测Lambda函数
- 若用CloudWatch Logs触发:Lambda订阅日志组的过滤规则,解析日志中的邮箱和自定义业务ID,统计同一邮箱+业务ID在指定时间窗口内的发送次数,超过2次时触发后续操作。
- 若用DynamoDB触发:通过DynamoDB流触发Lambda,每次新增发送记录时,查询该邮箱+业务ID的最近发送次数,判断是否触发阈值。
3. 执行暂停发送与告警
- 触发阈值后,Lambda调用SES的
PutEmailIdentitySuppressionAttributes接口,将该邮箱临时加入全局抑制列表,或针对特定配置集设置抑制规则,直接暂停向该邮箱发送邮件。 - 同时,Lambda调用SNS发布告警通知,告知运维人员排查服务故障(如发送逻辑重试bug、SES服务异常导致的重复投递)。
4. 故障修复后的恢复
- 故障排查完成后,可手动调用SES API将邮箱从抑制列表移除;
- 也可编写辅助Lambda,结合CloudWatch Events定时任务,自动检测发送服务健康状态,恢复正常后自动解除对该邮箱的发送限制。
注意事项
- 给Lambda配置足够IAM权限:需允许读取CloudWatch Logs/DynamoDB、调用SES抑制列表API、发布SNS消息;
- 时间窗口设置要贴合业务场景(如1小时),避免误判正常批量发送;
- 保留发送记录历史数据,方便排查重复发送的根本原因。
内容的提问来源于stack exchange,提问作者D.T Fadel
相关产品推荐
相关产品推荐

