邮件到达率:DKIM、SPF 与 DMARC 全解析
了解邮件为什么进垃圾箱,以及 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 会直接拒绝它,而不是将其投递到你的客户收件箱。
实际操作顺序
- 在 Rovela 添加你的域名——我们生成三条 DNS 记录。
- 在你的 DNS 服务商处发布全部三条记录。
- 在控制台点击验证。Rovela 会逐条测试并实时显示结果。
- 将 DMARC 策略设为
none,并添加rua报告地址。 - 两周后查看报告无异常,再升级为
quarantine,然后reject。
常见错误
| 错误 | 后果 |
|---|---|
| 同一域名有多条 SPF 记录 | 收件方只取最后一条,其余忽略;合规邮件验证失败 |
| DKIM 密钥短于 2048 位 | 部分服务商视为强度不足并降低评分 |
| 完全跳过 DMARC | SPF 和 DKIM 没有策略兜底;仿冒仍然有效 |
直接上 p=reject | 转发链配置不当的邮件会失败并丢失 |
Rovela 自动处理密钥生成和轮换。DNS 记录是唯一只有你才能控制的部分。