SPF、DKIM、DMARC 配置指南:一次讲清楚

邮件认证三件套 SPF、DKIM、DMARC 分别是做什么的、DNS 记录怎么写、怎么检查有没有生效,附常见错误和排查方法。

很多人第一次自己发邮件,最先碰到的不是代码问题,而是信全进了垃圾箱。原因八成出在认证上:Gmail、Outlook、QQ 邮箱都会检查 SPF、DKIM、DMARC 这三项,缺了或者配错了,你的信在对方眼里就像一封来路不明的信。

这篇把三者各自管什么、记录怎么写、怎么验证一次讲完。

SPF:谁有资格替你发信

SPF 是一条 TXT 记录,列出允许代表这个域名发信的服务器。收件方收到信后,会拿发信服务器的 IP 去对照这份名单。

send.example.com.  TXT  "v=spf1 include:_spf.bulkmail.dev -all"
  • include: 表示把另一个域名的 SPF 名单也算进来,邮件服务商一般都会给你一个。
  • -all 表示名单之外的一律不认;~all 是“不认但别直接拒”,刚开始配置时可以先用它。

两个容易踩的坑:同一个名字下只能有一条 SPF 记录,多条会直接判失败;另外 SPF 查的是信封发件人(Return-Path)的域名,不是你在信里看到的发件人。所以很多服务会让你在 send. 这样的子域名上配 SPF。

DKIM:证明信没被改过

DKIM 用一对密钥给邮件签名。私钥在发信服务器上,公钥放在 DNS 里,收件方用公钥验签,签名对得上,说明这封信确实是你的服务器发的,而且路上没被改过。

bm1a2b._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."

bm1a2b 叫 selector,用来区分同一个域名下的多把密钥。公钥很长,有的 DNS 服务商会自动拆成几段,这是正常的,不用手动处理。

在三项里,DKIM 最重要。SPF 在邮件被转发时容易失效,DKIM 签名却会跟着邮件一起走。

DMARC:告诉收件方认证失败了怎么办

DMARC 把前两项串起来:要求 SPF 或 DKIM 至少有一项通过,而且通过的那个域名要和信里显示的发件人域名对得上(叫“对齐”)。然后告诉收件方,不满足的话怎么处理。

_dmarc.example.com.  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
p 的值意思什么时候用
none只观察,不处理刚开始配置,先看看报告
quarantine放进垃圾箱确认自己的正常邮件都能通过之后
reject直接拒收完全确定后,防冒充效果最好

从 2024 年开始,Gmail 和 Yahoo 要求批量发件人必须有 DMARC 记录,哪怕是 p=none。所以别省这一条。

怎么确认配好了

  1. 用命令行查记录:dig +short TXT _dmarc.example.com,能看到你加的内容就说明 DNS 生效了。
  2. 给自己的 Gmail 发一封信,打开后点右上角「⋮ → 显示原始邮件」,最上面会列出 SPF、DKIM、DMARC 是 PASS 还是 FAIL。
  3. 如果用的是 BulkMail,控制台的域名页面会直接显示每条记录的检测状态。

几个常见问题

改了 DNS 多久生效?

一般几分钟,慢的话几个小时,取决于 TTL 和你的 DNS 服务商。Cloudflare 通常一两分钟就能查到。

公司已经在用企业邮箱了,再加一套会冲突吗?

DKIM 不会,因为 selector 不同。SPF 和 DMARC 是一个名字只能一条,所以更推荐用子域名发系统邮件,比如 mail.example.com,和办公邮箱完全分开,互不影响。

用 BulkMail 发你的第一封信

注册不用绑卡,每天 100 封免费额度。加个域名、调一个接口就能发。