Amazon SES 邮件认证:SPF、DKIM 与 DMARC 配置

在 Amazon SES 启用 Easy DKIM 并发布三条 CNAME,配置自定义 MAIL FROM 域实现 SPF 对齐,并自行发布 DMARC,涵盖 2048 位密钥与 BYODKIM。
4 分钟阅读
更新于 2026-11-04
平台专区
amazon-sesdkimspfdmarc认证

Amazon SES 只提供投递机制,认证架构全靠自己设计。默认状态下 SES 不签名任何邮件,Return-Path 落在 amazonses.com 上——SPF 检查能过,但过的是亚马逊的域名,与你的 From 域不对齐,DMARC 依然失败。而 Gmail、Yahoo、微软对批量发件人的所有要求,对 SES 流量一个都不少。

好消息是:一个控制台设置(Easy DKIM)加几条 DNS 记录就能让 SES 邮件完成全部认证;再可选地配置自定义 MAIL FROM 域,SPF 对齐也能拿到。本篇两个都讲,并说明 BYODKIM 什么时候值得用。

开始前的准备

  • 开通 Amazon SES 的 AWS 账号,以及已验证的域名身份(SES 控制台 → Configuration → Identities)。
  • 域名解析区权限——Route 53、Cloudflare 或任何服务商均可。
  • 想清楚 From 域名。SES 只需要给 From 地址的域配 DKIM;Return-Path 和 Reply-To 域名不需要。

第一步:启用 Easy DKIM

在 SES 控制台打开 Configuration > Identities,选择域名身份,在 Authentication 标签下编辑 DKIM 设置:选择 Easy DKIM,密钥长度选 RSA_2048_BIT(新身份的默认值),勾选启用 DKIM 签名并保存。SES 会生成三条 CNAME 记录:

CNAME  abcdef123456._domainkey.yourdomain.com  ->  abcdef123456.dkim.amazonses.com
CNAME  ghijkl789012._domainkey.yourdomain.com  ->  ghijkl789012.dkim.amazonses.com
CNAME  mnopqr345678._domainkey.yourdomain.com  ->  mnopqr345678.dkim.amazonses.com

三条都按控制台显示原样发布——token 是身份专属的。用 Route 53 的话可以一键由 SES 代建。记录生效后,控制台的 DKIM 状态变为 Verified,该身份发出的每封邮件都以 d=yourdomain.com 签名,仅凭 DKIM 对齐即可满足 DMARC。

第二步:配置自定义 MAIL FROM 域(SPF 对齐)

SPF 校验的是信封发件人(MAIL FROM / Return-Path 域名)。SES 默认信封是 amazonses.com 的子域,所以 SPF 过了也不对齐。要拿 SPF 对齐,就在身份的 MAIL FROM 设置里配置自定义 MAIL FROM 域——它必须是已验证域名的子域,例如 mail.yourdomain.com——然后在该子域上发布两条记录:

mail.yourdomain.com.  TXT  "v=spf1 include:amazonses.com ~all"
mail.yourdomain.com.  MX   10 feedback-smtp.us-east-1.amazonses.com

MX 的值随 AWS 区域不同而不同,以控制台显示为准。由于自定义 MAIL FROM 域必须是 From 域的子域,对齐依赖默认的宽松模式——这也是不要在 DMARC 里强设 aspf=s 的又一个理由。

第三步:发布 DMARC

DMARC 不归 SES 管,需要自己发布在 From 域根下,从监控模式开始:

_dmarc.yourdomain.com.  TXT  "v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com; fo=1"

观察几周聚合报告,修掉其他失败发件源,再逐步升级 quarantine、reject。绝不要直接上 p=reject——同一策略会把你域名下所有其他服务一起打掉。

什么时候用 BYODKIM

Easy DKIM 由 SES 替你保管密钥;SES 还支持 BYODKIM(自带 DKIM):自己生成密钥对,上传私钥,自行把公钥发布为 TXT 记录。适合安全策略要求自持密钥材料、或需要指定 selector 的场景。密钥保持 2048 位——BYODKIM 接受 1024–2048 位,但 1024 位已被视为弱密钥,部分接收方直接拒收。

如何验证

通过 SES 向 Gmail 发一封测试邮件,打开显示原始邮件,或把信头贴进 邮件头分析器。两步都做完后应看到:SPF 通过且域为 mail.yourdomain.com,DKIM 通过且 d=yourdomain.com,DMARC 通过。再用 DKIM 检测(selector 用控制台给的 token)、SPF 检测、DMARC 查询逐条核对,或用 邮件健康检查一次查完。协议不熟的话先读 邮件认证基础指南。

常见错误

  • 以为 SPF 过了 DMARC 就过了。默认信封域下,SPF 过的是 amazonses.com,对 DMARC 毫无贡献。真正起作用的是对齐,而 DKIM 对齐是底线。
  • 忘记按区域配置。从多个 AWS 区域发信时,DKIM(以及自定义 MAIL FROM)要在每个区域分别完成——一个区域的签名覆盖不了另一个。
  • 自定义 MAIL FROM 子域漏配 MX。这套配置需要 SPF TXT 和反馈 MX 两条记录,缺 MX 会让 MAIL FROM 域一直停在待验证状态。
  • 发布第二条 SPF。include:amazonses.com 那条记录发在自定义 MAIL FROM 子域上;如果该子域已有 SPF,合并进一条。
  • 在沙箱里下结论。沙箱账号只能发给已验证地址,很多投递问题被掩盖。先申请生产权限再评估效果。

常见问题

DKIM 已经对齐了,还需要自定义 MAIL FROM 域吗?

不必须——DMARC 只要有一个对齐机制通过即可,Easy DKIM 单独就满足。但自定义 MAIL FROM 域是值得做的双保险:它额外带来 SPF 对齐,对那些同时掂量两个信号的接收方更友好。

Easy DKIM 用多长的密钥?

新身份默认 2048 位 RSA,保持这个长度即可;正常的 DNS 环境没有理由使用更短的密钥。

已验证域名的子域会自动签名吗?

会。DKIM 属性可继承:给域名开启 Easy DKIM 后,其子域发出的邮件同样被签名,除非你为某个子域身份显式关闭继承。

SES 能代管 DMARC 吗?

不能。SES 没有任何 DMARC 设置项,记录发布和报告监控都是你的事。记录可以用 DMARC 生成器生成,报告用 DMARC 报告分析器来读。

这篇指南有帮助吗?