什么是 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 内部会自动追踪它的状态:

1
你发出邮件 → 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 内部会做如下事:

1
2
3
4
1️⃣ 生成事件(Delivery、Bounce等)
2️⃣ 投递给 SNS Topic
3️⃣ SNS 推送 JSON 到你的 Webhook
4️⃣ 你在 Cloudflare Worker 中接收并存入数据库

这样,你的系统就能实时追踪每封邮件的状态


总结一句话

SES 会产生事件(Send、Delivery、Bounce、Complaint…), 只是默认不会输出。

你需要通过配置 Event Destination(SNS / EventBridge / S3), 才能让这些事件“流出来”,被你的系统消费。


要不要我帮你写一个 Cloudflare Worker 接收 SES → SNS 回调的示例? 包括事件 JSON 示例和验证签名的处理流程。 这样你可以直接接入 SES 事件流。