用 Amazon SES 构建大规模邮件发送基础设施 - 到达率优化与发送信誉管理
解析 SES 的邮件发送设置、DKIM/SPF 认证、退信/投诉处理、发送信誉管理。
SES 概述
SES 是基于云的大规模邮件收发服务。用于发送事务性邮件 (订单确认、密码重置)、营销邮件 (新闻通讯、活动)、通知邮件 (告警、报告)。每封 0.10 USD / 1000 封的按需计费,大幅降低大量发送成本。发送协议同时支持 SMTP 接口和 AWS SDK (SendEmail / SendRawEmail API),从现有邮件系统迁移时使用 SMTP,新应用集成时使用 SDK。SES 基础设施在多个 AWS 区域运行,每个区域独立管理发送信誉。
到达率与发送信誉
提高邮件到达率需要 DKIM、SPF、DMARC 的认证设置。SES 通过 Easy DKIM 自动添加 2048 位 DKIM 签名,通过自定义 MAIL FROM 域名通过 SPF 认证。在 DNS 中发布 DMARC 策略可保护域名免受伪造邮件侵害。退信率需维持在 5% 以下,投诉率需维持在 0.1% 以下,超过时账户发送会被暂停。SES 在账户仪表板上实时显示退信率和投诉率,可配置 CloudWatch 告警在接近阈值时通知。通过 SNS 通知实时接收退信和投诉,用 Lambda 构建从发送列表自动删除的工作流。退信分为硬退信 (地址不存在) 和软退信 (邮箱已满等),硬退信应立即加入抑制列表,软退信在重试后再判断。
模板与接收规则
SES 的邮件模板使用 Handlebars 语法嵌入动态内容,通过 SendBulkTemplatedEmail API 批量发送个性化邮件。接收规则集自动化接收邮件的处理,可设置保存到 S3、执行 Lambda、通知 SNS、转发到 WorkMail。Virtual Deliverability Manager 在仪表板中可视化发送邮件的到达率,提供退信率和投诉率的改善建议。配置集将邮件发送事件 (发送、送达、退信、投诉、打开、点击) 分发到 Kinesis Data Firehose 或 SNS,执行发送分析。 要从基础到应用系统学习 SES,可参考相关书籍 (Amazon)。
SES 的费用
SES 的发送费用为每 1,000 封约 0.10 美元,附件每 GB 约 0.12 美元。从 EC2 发送每月 62,000 封免费。接收前 1,000 封免费,之后每 1,000 封约 0.10 美元。专用 IP 地址每个月约 24.95 美元,用于需要分离发送信誉的场景。Virtual Deliverability Manager 每 1,000 封约 0.07 美元的额外费用。
设计最佳实践与常见陷阱
整理 SES 生产运行中常见的设计要点和容易忽视的陷阱。抑制列表管理是最高优先级。除了账户级别的抑制列表外,应用程序侧也应维护独立的抑制列表,彻底防止向已退信地址重新发送。预热期间应每天将发送量逐步增加约 2 倍,以降低被 ISP 判定为垃圾邮件的风险。使用专用 IP 时,建议至少进行 2 周的预热。将配置集的事件通知目标设为 Kinesis Data Firehose,在 S3 中积累日志以分析到达率的长期趋势。在沙箱模式下只能向已验证地址发送,因此应提前提交发送限制解除申请 (审核可能需要数个工作日)。DMARC 策略建议先以 p=none 进行监控,分析报告后再逐步提升到 p=quarantine 或 p=reject。
与其他邮件发送服务的比较
将 SES 与其他邮件发送方式进行比较。与 SendGrid 和 Mailgun 不同,SES 的优势在于与 AWS 生态系统的原生集成 (Lambda 触发器、S3 存储、CloudWatch 指标)。另一方面,SendGrid 拥有更丰富的营销模板 GUI 编辑器和 A/B 测试功能。与本地 Postfix / SMTP 中继相比,SES 通过自动化 IP 信誉管理和退信处理大幅降低运维负担。Amazon Pinpoint 是一项具备细分管理和活动调度功能的营销向服务,内部使用 SES 作为邮件发送引擎。大量事务性邮件低成本发送直接使用 SES,需要分群营销活动时通过 Pinpoint。SNS 的 Email 订阅适用于简单通知,仅在不需要 HTML 模板和退信管理的简单通知场景中使用。
总结
SES 的导入从沙箱模式的发送测试开始,经过发送限制解除申请后迁移到生产运行。维持到达率需要 DKIM 和 SPF 的认证设置、退信和投诉的处理流程构建、发送信誉的监控。通过 Virtual Deliverability Manager 的仪表板追踪到达率变化,早期发现问题征兆。大量发送时用专用 IP 地址分离信誉,设置预热期逐步增加发送量。