← 返回博客
deliverabilitydkimspfdmarcdns

邮件到达率:DKIM、SPF 与 DMARC 全解析

了解邮件为什么进垃圾箱,以及 DKIM 签名、SPF 记录和 DMARC 策略如何协同工作,证明你的发信身份并防止域名被仿冒。

更新于 2026年10月1日
邮件到达率:DKIM、SPF 与 DMARC 全解析

邮件到达率:DKIM、SPF 与 DMARC 全解析

发出邮件比让邮件被收到要容易得多。一封经过 Postfix 正常投递的邮件,仍可能因身份验证记录不过关而进入垃圾箱,甚至被静默丢弃——因为收件方服务商会对每一封进站邮件打分。本文解释决定这个分数的三项标准。

为什么需要身份验证

电子邮件诞生于没有身份层的时代。任何服务器都可以声称自己是 ceo@yourbank.com。DKIM、SPF 和 DMARC 是后来补充的方案,让合法发件人能证明域名归属。

SPF:谁有资格发信

SPF 记录是一条位于域名根的 TXT 记录,列出被允许从该域名发信的 IP 地址和服务:

v=spf1 include:_spf.rovela.dev ~all

~all 表示"其他发件人可疑";-all 表示"拒绝其他一切"。在 Rovela 中添加域名后,我们会为你生成正确的 include: 条目。

局限性:SPF 只校验 SMTP MAIL FROM(信封发件人),而非读者看到的 From: 头。这也是为什么仅靠 SPF 不够用。

DKIM:加密签名

DKIM 用你发信服务持有的私钥为每封邮件附加签名。公钥存放在 DNS:

rovela._domainkey.acme.com  TXT  "v=DKIM1; k=rsa; p=MIIBIjAN..."

收件服务器取回该记录并验证签名。若吻合,即可证明这封邮件来自掌控你域名的人。被篡改的邮件会验证失败。

Rovela 为每个域名生成 2048 位 RSA 密钥对。私钥从不离开我们的基础设施;公钥就是你需要添加的那条 DNS 记录。

DMARC:将两者联结起来的策略

DMARC 告知收件方如何处理 SPF 和 DKIM 双双失败的邮件,以及将报告发往何处:

_dmarc.acme.com  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@acme.com"

p= 的值从 none(仅观察上报)逐步过渡到 quarantine(放入垃圾箱)再到 reject(拒绝投递)。建议先设为 none,读几周汇总报告,再逐步收紧。

p=reject 的意义:当你的域名发布了 p=reject,而一封钓鱼邮件的 DKIM 和 SPF 双双失败,Gmail 和 Outlook 会直接拒绝它,而不是将其投递到你的客户收件箱。

实际操作顺序

  1. 在 Rovela 添加你的域名——我们生成三条 DNS 记录。
  2. 在你的 DNS 服务商处发布全部三条记录。
  3. 在控制台点击验证。Rovela 会逐条测试并实时显示结果。
  4. 将 DMARC 策略设为 none,并添加 rua 报告地址。
  5. 两周后查看报告无异常,再升级为 quarantine,然后 reject。

常见错误

错误后果
同一域名有多条 SPF 记录收件方只取最后一条,其余忽略;合规邮件验证失败
DKIM 密钥短于 2048 位部分服务商视为强度不足并降低评分
完全跳过 DMARCSPF 和 DKIM 没有策略兜底;仿冒仍然有效
直接上 p=reject转发链配置不当的邮件会失败并丢失

Rovela 自动处理密钥生成和轮换。DNS 记录是唯一只有你才能控制的部分。