SPF 记录检查:您的 SPF 记录有效吗?
邮件进了垃圾邮件箱,或者某项服务提示您的 SPF 无效?在下方输入您的域名。检查工具会获取 SPF 记录,展开每个 include,统计 DNS 查询次数与 10 次上限的对比,并用通俗的语言列出需要修复的地方。
接收服务器如何使用您的 SPF 记录
邮件到达时,接收服务器会查看信封发件人中的域名,并获取该域名的 SPF 记录:一条以 v=spf1 开头的 TXT 记录。然后检查刚刚连接进来的服务器的 IP 地址是否在列表中。结果为 pass、fail、softfail 或 neutral,接收方会把它与其他信号综合考虑,决定邮件进入收件箱还是垃圾邮件箱。
SPF 检查的是信封发件人,而不是人们在邮件应用中看到的 From 地址。弥补这一差距是 DMARC 的工作。
SPF 术语速览
| 术语 | 作用 |
|---|---|
| ip4:192.0.2.0/24 | 允许某个 IPv4 地址或地址段 |
| ip6:2001:db8::/32 | 允许某个 IPv6 地址或地址段 |
| a | 允许域名自己的 A 和 AAAA 记录中的地址 |
| mx | 允许域名的邮件服务器的地址 |
| include:_spf.example.net | 同时允许该域名的 SPF 记录所允许的一切 |
| exists:name | 当对该名称的 DNS 查询返回地址时予以允许 |
| ptr | 已弃用。按反向 DNS 匹配,不应再使用 |
| all | 匹配所有对象,因此放在最后,并设定默认结果 |
术语前面的限定符决定匹配时的结果:+ 为通过(默认),- 为失败,~ 为软失败,? 为中立。常见的结尾是 ~all,它会把未列出的发件方标记为可疑,以及 -all,它会要求接收方拒收这些邮件。
为什么多添加一项服务,SPF 就失效了
SPF 在评估一条记录时,最多允许 10 个会触发 DNS 查询的术语。include、a、mx、ptr 和 exists 都会计入,redirect 修饰符也一样。ip4、ip6 和 all 则不计入。被包含的记录内部的查询,会累加到同一个总数里。
一条健康的记录就是这样变坏的:您添加了群发邮件工具、客服系统、CRM 和账单系统,每个都带有自己的 include,而其中一些 include 内部还包含其他的 include。一旦超过 10 次,SPF 就会返回永久错误。接收方可能随后把每封邮件都当作该域名完全没有 SPF 来处理,而且没有人会通知您。
- 删除您不再使用的服务所对应的 include。
- 当服务商的地址比较稳定时,用 ip4 和 ip6 地址段取代 include。
- 绝不要使用 ptr。
- 尽可能为每项发信服务分配各自的子域名。每个名称都有自己独立的 10 次上限。
- 如果您把 include 拍平成具体地址,请记住服务商会变更它们的地址段,因此拍平后的记录需要定期更新。
设置 SPF 策略的稳妥做法
- 每个名称只发布一条 SPF 记录。两条记录会造成永久错误。
- 在确认所有合法发件方都已列出之前,先使用 ~all,确定无误后再改为 -all。
- 请记住 SPF 不会被继承。发送邮件的子域名需要有自己的记录,而从不发送邮件的子域名可以发布 v=spf1 -all。
- 把 SPF 与 DKIM 和 DMARC 策略搭配使用。它们各自弥补了对方的不足。