什么是 SES
是亚马逊提供的一个高可用、可扩展的云邮件发送服务,可以用于:
- 发送事务性邮件(例如验证码、密码重置);
- 发送营销邮件(例如促销通知、活动邀请);
- 接收或转发邮件。
沙盒
生产环境中,需要移除沙盒
IAM 配置获取 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY
主要功能
Configuration Sets
用于配置邮件的投递跟踪(如投递成功、退信、投诉、点击、打开等事件)。
Event Destinations
指定投递事件要发往哪里(如 SNS、EventBridge、CloudWatch)。
SES 专注于发信,不负责通知
Email Sending Events
AWS SES 本身会产生事件(Events),只是默认情况下不会自动告诉你,除非你配置了 SNS、EventBridge 或 S3 作为“事件出口”。
SES 能产生哪些事件?
SES 在邮件的整个生命周期中,会自动生成一系列事件(称为 Email Sending Events)。 这些事件描述了每一封邮件从“发送”到“收件人处理”的完整状态。
| 事件类型 | 说明 |
|---|---|
| Send | 邮件请求已被 SES 接收并开始处理。 |
| Delivery | 邮件成功投递到收件人邮箱服务器。 |
| Bounce | 邮件被退回(例如收件人不存在、邮箱满)。 |
| Complaint | 用户把邮件标记为垃圾邮件。 |
| Open | 收件人打开了邮件(需启用 open tracking)。 |
| Click | 收件人点击了邮件中的链接(需启用 click tracking)。 |
| Reject | 邮件因策略被 SES 拒绝发送(例如黑名单或限制)。 |
| Rendering Failure | 邮件模板渲染失败(例如变量错误)。 |
这些事件是 SES 内部天然产生的, 只是默认情况下它不会主动“通知”你。
事件是怎么产生的?
每封邮件发出后,SES 内部会自动追踪它的状态:
|
|
例如:
- 如果 Gmail 返回 “250 OK” → SES 生成一个 Delivery 事件;
- 如果返回 “550 No Such User” → SES 生成一个 Bounce 事件;
- 如果收件人举报垃圾邮件 → SES 从反馈循环系统(Feedback Loop)生成一个 Complaint 事件。
这些事件随后会被放入 SES 的“事件管道(Event Stream)”中。
但默认不会显示给你 —— 需要配置“出口”
默认情况下,SES 不会在控制台或 API 返回这些事件。 你必须告诉它:“这些事件要发到哪里去?”
这就是 Event Destination(事件目的地) 的作用。 目前 SES 支持以下几种目的地:
| 事件出口类型 | 用途 | 实时性 |
|---|---|---|
| SNS Topic | 把事件发布到 SNS(推送到 Webhook、Lambda、Email) | ✅ 实时 |
| EventBridge | 把事件路由到 AWS Event Bus,可过滤和转发 | ✅ 实时 |
| S3 Bucket | 把事件日志写入文件(JSON 格式) | ⚠️ 延迟几分钟 |
| CloudWatch Logs / Metrics | 聚合统计(不含单条详情) | ⚠️ 延迟或汇总级别 |
实际例子
例如,你配置了:
- 一个
Configuration Set(配置集) - 里面添加一个 SNS
Event Destination - 选择事件类型:Send, Delivery, Bounce, Complaint
那么当邮件发送后,SES 内部会做如下事:
|
|
这样,你的系统就能实时追踪每封邮件的状态。
总结一句话
SES 会产生事件(Send、Delivery、Bounce、Complaint…), 只是默认不会输出。
你需要通过配置 Event Destination(SNS / EventBridge / S3), 才能让这些事件“流出来”,被你的系统消费。
要不要我帮你写一个 Cloudflare Worker 接收 SES → SNS 回调的示例? 包括事件 JSON 示例和验证签名的处理流程。 这样你可以直接接入 SES 事件流。