Deliverability

什么是 SPF?SPF 记录有什么作用?

SPF 检查某个 IP 是否被允许代表 envelope-from 或 HELO 域名发送邮件,SPF 记录则在 DNS 中发布该域名的授权规则。

在更改 SPF 之前,先确认你的发送服务在 envelope-from 地址中使用的域名。该地址用于接收退信,可能与收件人看到的 From 地址不同。

SPF 检查哪个域名?

SPF 检查 SMTP MAIL FROM(即 envelope-from 地址)中的域名,或服务器的 HELO 身份。HELO 是发送服务器在发起 SMTP 会话时提供的主机名。

接收方在收到 MAIL FROM 时已经知道连接 IP,因此 SPF 可以在邮件正文到达之前运行。当 envelope 发件人为空时(如 MAIL FROM:<>),SPF 使用 HELO 身份。RFC 7208(SPF 标准)还建议单独检查 HELO。

SPF 不检查可见的 From 地址。DMARC 对齐将经过身份验证的域名与该地址关联起来。

SPF 记录是什么样的?

SPF 记录是一条 DNS TXT 记录,其值以 v=spf1 开头,后跟授权规则。

example.com TXT "v=spf1 include:mailprovider.example ~all"

这里,include:mailprovider.example 授权通过该提供商 SPF 策略的 IP。~all 对其他 IP 产生 softfail 结果。请将示例提供商替换为你的发送服务发布的策略。

机制和修饰符是什么意思?

机制根据条件测试连接 IP。redirect 修饰符在没有机制匹配时委托求值。

术语作用
ip4ip6匹配直接写在记录中的地址或网段。
a匹配指定域名返回的地址,使用连接的 IP 协议族。
mx匹配指定域名的邮件交换服务器地址。
include当引用的策略对该 IP 返回 pass 时匹配。
exists当指定的 DNS 名称存在 A 记录时匹配;宏可以根据连接信息构造该名称。
redirect=在没有机制匹配时求值另一个域名的策略;all 机制会使其失效。
ptr检查经过验证的反向 DNS 名称;不要将其添加到新记录中,因为查询速度慢且不可靠。
all匹配所有剩余 IP,由其限定符决定结果。

地址机制的写法为 ip4ip6ptr 条目可能出现在较旧的策略中,但 RFC 7208 不建议使用它,同时要求验证器仍需支持。

all 限定符会改变什么?

限定符设置 IP 到达 all 时的 SPF 结果;接收方据此决定如何处理邮件。

结尾结果
-allFail:域名不授权该 IP。
~allSoftfail:域名认为该 IP 很可能未被授权。
?allNeutral:域名不作任何声明。
+all对所有 IP 返回 pass,移除 SPF 原本提供的限制。

示例记录如何求值?

以下每个示例展示一条独立的策略。其中的 IP 和域名均为文档示例,不是你应为发件人发布的值。

记录授权内容
v=spf1 mx ip4:192.0.2.10 ip4:198.51.100.0/24 ~all域名的邮件交换服务器、一个 IP 和指定的网段;其他 IP 为 softfail。
v=spf1 a ip4:192.0.2.0/25 ip4:198.51.100.0/26 -all域名的地址记录和两个网段;其他 IP 为 fail。
v=spf1 -all不授权任何 IP;使用该域名的所有尝试均 SPF fail。
v=spf1 +all所有 IP,因此不提供任何发送限制。
v=spf1 redirect=_spf.example.com_spf.example.com 处的策略所授权的内容。
v=spf1 exists:%{i}._spf.example.com ~all展开后查询名称返回 A 记录的 IP;其他 IP 为 softfail。

对于 exists 示例,来自 192.0.2.10 的连接产生查询名称 192.0.2.10._spf.example.com。你必须自行运维使该策略生效的 DNS 记录;该模式本身不会授权某个提供商。

SPF 可以使用多少次 DNS 查询?

SPF 允许在策略和嵌套求值中总共使用十个需要 DNS 查询的术语。第十一个会产生 permerror,因此添加另一个提供商可能导致求值中断而非授权成功。

计入次数的术语包括 includeamxptrexistsredirect。字面量 ip4ip6all 术语不占用该配额。计数的是术语,而非每个 DNS 数据包。return-path CNAME 提供 Bird 的 SPF 授权,无需在顶级域名添加 include。

转发的邮件为什么会 SPF 失败?

转发器或邮件列表可能从原始 envelope-from 域名未授权的 IP 重新发送合法邮件。例如,校友邮箱转发到个人邮箱会改变最终接收方看到的连接服务器。

如果 envelope-from 地址保持不变,SPF 会根据原始域名的策略评估该新服务器。转发器可以使用 Sender Rewriting Scheme (SRS) 改写 envelope-from 地址来验证自己的域名。这本身不会将 SPF 与原始可见的 From 地址对齐。

完整且对齐的 DKIM 签名仍然可以提供 DMARC pass。身份验证不能证明邮件是收件人期望的,也不能保证进入收件箱。

你应该为 Bird 发布什么?

你需要发布为发送域名提供的 return-path CNAME。它指向 Bird 的退信基础设施,该设施已提供 SPF 授权。你无需在顶级域名额外添加 SPF include 即可通过 Bird 发送。

保留现有的顶级域名 SPF 记录,不要改动其他发件人的设置。复制该域名的 dns_records。验证 capabilities.return_path.status;检查 capabilities.sending.status 以确认所有发送要求均已就绪。两个状态字段使用以下值:

状态含义与操作
pending验证尚未运行或正在运行;等待结果。
verified该功能的 DNS 记录与预期值匹配。
warning之前已验证的记录不再匹配;请在宽限期结束前修复。发送尚未受影响。
failedDNS 值错误;请更正。
temporary_failureDNS 查询暂时失败;验证会自动重试。
not_configured该功能尚未为此域名设置。

你需要在发送前验证 DKIM、return-path 和 DMARC。你可以更改 return-path 主机名。如果 DNS TXT 值需要多个带引号的字符串,DNS 记录拆分工具可以格式化这些字符串,而不影响 SPF 的查询配额。

付诸实践。

继续查阅此主题的文档、指南和示例。资源为英文。

获取实施简报

基于同一网络构建。

测试 API 密钥即刻获取。添加付款方式并验证发送者身份后,即可解锁生产环境。

从一个渠道开始。
准备好后,再添加其他渠道。

测试 API 密钥即刻可用。添加支付方式并验证发送者身份后,即可解锁生产环境。

正在使用 Claude Code、Cursor 或 Codex?复制一条设置提示,您的智能代理即可自动安装 Bird CLI 和相关技能。选择您的工具:

Cursor