SPF 查询限制的核心很简单:如果评估 SPF 策略需要超过 10 个触发 DNS 查询的项,接收方可以停止处理并返回永久错误。因此,即使邮件的 DNS 设置看起来正常,实际认证仍可能失败。如果你正在整理域名邮箱,可以先阅读小企业商务邮箱,再回来处理这个往往在后续才暴露的问题。
很多团队都会遇到这种情况:先接入 Google Workspace,再接入 Microsoft 365、Mailchimp、CRM 和客服系统。每家供应商都说:“加上我们的 include 就行。”几个月后,SPF 记录语法依然有效,实际评估却可能失败。邮件开始进入垃圾邮件文件夹,有些还被退回。由于记录乍看并无异常,团队往往找不到原因。
好消息是,解决办法通常并不复杂:删除停用的条目;确有需要时才使用 `mx`;将营销邮件转移到子域名;让主域名的配置保持简洁。
什么是 SPF 查询限制?
SPF 查询限制是 RFC 对评估过程中触发 DNS 查询的 SPF 项设定的上限。接收方在整个 SPF 评估路径中不得处理超过 10 个此类项,嵌套的 `include` 链也要计入。如果策略超过限制,SPF 可能返回 `permerror`,邮件就会失去一个重要的认证信号。
RFC 7208规定了这项规则,目的是避免 SPF 产生过多 DNS 流量或被用于 DNS 放大。这不是可选建议,而是协议限制。
容易忽略的是,SPF 查询限制采用累计计数。主记录不是可以使用 10 次,然后每个 include 再各用 10 次。整个实际评估路径共用一个预算。
| SPF 机制 | 查询开销 | 实用建议 |
|---|---|---|
include: | 1 | 很常见,但嵌套 include 会快速累积开销 |
a | 1 | 适合小型配置,但往往并非必要 |
mx | 1+ | 通常不适合作为出站发送授权方式 |
ptr | 1+ | 避免使用;RFC 7208 明确不建议使用 |
exists | 1 | 不常见,容易配置不当 |
redirect= | 1 | 适用于特定设计,但仍占预算 |
ip4 / ip6 | 0 | SPF 评估时不触发 DNS 查询 |
all | 0 | 仅定义最终策略,不触发查询 |
为什么看似正常的记录会被 SPF 查询限制影响
SPF 查询限制会影响看起来没有问题的记录,因为 SPF 不关心主 TXT 记录是否整齐,而是关心实际评估链中 include、redirect、`a` 和 `mx` 等触发 DNS 的项。表中的开销是简化示意,不能直接当作底层 DNS 数据包数量。
例如:
你发布 `v=spf1 include:_spf.google.com include:spf.protection.outlook.com include:servers.mcsv.net -all`,以为只用了三次查询。其实 Google 和 Microsoft 的记录可能继续引用其他记录。可见的记录很短,完整评估路径却未必短。
所以,SPF 查询限制经常不是第一天就出问题。供应商调整自己的 SPF 树后,即使你没有修改 DNS,评估开销也可能增加。
还有一个陷阱:空查询,也叫 void lookup。RFC 7208 建议实现将空查询限制为两次。空查询指返回无数据响应或 `NXDOMAIN` 的 DNS 查询。一个 include 拼写错误不一定导致失败,但两个无效引用就可能触发问题。此时,除了SPF 查询限制,还可能出现 `permerror`,即使总数仍低于 10。
Google 公布的发件要求也说明了后果:批量发件人的认证缺失或配置错误,可能导致邮件被放入垃圾邮件文件夹或被拒收。Google 文档要求此类发件人配置 SPF、DKIM 和 DMARC;不符合发件要求的邮件可能被拒收或归入垃圾邮件。参阅Google 发件要求常见问题。
如何计算 SPF 查询预算的使用量
要检查SPF 查询限制,从主 SPF 记录开始,沿实际评估路径累计所有触发 DNS 的机制。既要看自己的项,也要看供应商记录中的下层引用。可先展开递归树检查潜在路径;若某条实际路径超过 10,评估可能失败。
先查看主记录:
dig +short txt example.com示例输出:
"v=spf1 include:_spf.google.com include:spf.protection.outlook.com -all"再检查每个被引用的域名:
dig +short txt _spf.google.com
dig +short txt spf.protection.outlook.com继续追踪,直到只剩 `ip4`、`ip6` 或终止策略项。
按以下方式计数:
- 计入实际遇到并评估的每个
include、a、mx、ptr、exists和redirect。 - 也要计入被包含记录中实际评估的嵌套项。
- 不要计入
ip4、ip6或all。 - 标记所有不返回数据的 include 目标,它们可能造成空查询问题。
在 TrekMail 中设置域名时,如果想快速检查 DNS,可以先阅读检查 DNS 状态和必需的 DNS 记录文档。
常见的 SPF 查询限制配置错误
多数SPF 查询限制问题来自几类重复出现的错误:在主域名上叠加供应商、保留旧服务商、用 `mx` 代替明确授权,以及手动展开记录却没有维护流程。这些通常不是特殊技术难题,而是 DNS 配置长期缺乏整理的结果。
最常见的情况包括:
| 错误 | 影响 | 更好的做法 |
|---|---|---|
| 保留旧供应商 | 浪费查询预算,并扩大风险 | 删除已不再用于发信的服务 |
用 mx 授权出站发送 | 接收邮件的 MX 主机往往不是实际发件主机 | 明确授权真正的发送系统 |
使用 ptr | 速度慢、不推荐,也容易出错 | 删除它 |
| 所有邮件都从同一域名发送 | 营销和事务邮件共用一个 SPF 预算 | 将邮件流分配到不同子域名 |
| 手动展开 SPF | 供应商更换 IP 后可能失效 | 自动更新,或避免展开 |
团队还容易把可见复杂度和实际复杂度混为一谈。一个供应商 include 展开后可能消耗多个查询项。因此,面对SPF 查询限制,“再加一个发件服务”并不是可靠的规划方式。
为某项业务选择转发、别名还是独立邮箱时,也要考虑它与发件配置的关系。相关阅读:域名邮箱别名与邮箱的区别以及邮箱别名转发。
如何降低 SPF 查询开销,减少对邮件的影响
处理SPF 查询限制时,风险较低的做法是减少策略复杂度,而不是继续叠加补丁。先清理停用的发送服务,再将高流量系统移至子域名。只有能够自动保持更新时,才考虑展开 SPF。
1. 删除冗余配置。
删除不再使用的供应商,移除 `ptr`,并用实际需要的发件授权替代 `mx`。许多有问题的策略经过一次清理,就能重新满足SPF 查询限制。
2. 按子域名拆分邮件流。
对于不断增长的团队,这通常是更实用的方案。
; Primary company mail
example.com. TXT "v=spf1 include:spf.trekmail.net -all"
; Marketing mail
marketing.example.com. TXT "v=spf1 include:servers.mcsv.net include:hubspotemail.net -all"
; Transactional app mail
notify.example.com. TXT "v=spf1 include:amazonses.com -all"每个子域名都有自己的 SPF 策略和查询预算。这有助于减轻主域名负担,也让SPF 查询限制更容易管理。
3. 将展开 SPF 作为最后选择。
展开 SPF 会把 include 替换为直接列出的 IP 范围:
; Before
v=spf1 include:vendor-a.example include:vendor-b.example -all
; After
v=spf1 ip4:192.0.2.10 ip4:192.0.2.11 ip4:198.51.100.0/24 -all这样能将查询开销降至接近零,却增加了维护负担。供应商更换 IP 后,旧记录可能导致认证失败。如果采用展开方案,应自动更新。
旧方式与新方式:用 TrekMail 管理 SPF 查询限制
处理SPF 查询限制的旧方式,是不断把邮箱供应商、营销平台和中继堆到同一主域名上,直到 DNS 配置难以追溯。新方式则是减少依赖,并从一开始就区分发件角色。
旧方式:主域名 SPF 记录拥挤,旧供应商仍然保留,营销邮件与日常邮箱邮件混用,谁有权发信也缺乏明确责任人。
新方式:简化邮箱托管,把大批量发件服务放到子域名上,并为主域名保留简短且有余量的 SPF 策略。
TrekMail 可以帮助简化这种配置。使用付费套餐的托管发送时,所描述的 DNS 设置需要在 SPF 记录中加入 `include:spf.trekmail.net`。该 include 本身计为一次查询项,是否存在下层引用仍应检查。文中介绍的套餐起价为 $3.50/月,并列出自定义域名、IMAP 邮箱、catch-all、邮箱转发、内置迁移工具和 API 访问。付费套餐描述了 14 天免费试用,需要信用卡;Nano 则描述为持续免费的非试用套餐,使用 BYO SMTP。配置前请确认当前价格、功能和条件。
使用 Nano 时,可以由 TrekMail 提供邮箱层,发送则交给 SES、Mailgun 或其他中继。应认真规划子域名,避免主域名策略触及SPF 查询限制。TrekMail 的自定义 SMTP(BYO)、托管 TrekMail SMTP和从控制面板启动迁移文档介绍了操作方法。
如果正在整合多个域名,也可以阅读多域名邮箱托管和在自己的域名上设置邮箱。
总结:如何保持在 SPF 查询限制以内
要满足SPF 查询限制,关键是让策略保持简单。主域名只保留必要的发送服务,把批量邮件和应用邮件移至子域名,每接入一个新工具就重新检查供应商 include。策略接近 10 时,就应提前减少开销。
SPF 查询限制不是只存在于 RFC 中的理论边界,而是实际运行中的硬性约束。不断叠加供应商会让它越来越难管理。保持记录简短,明确 DNS 配置负责人。否则,让五家供应商共用一个有限的认证路径,可能会让你在凌晨 2 点还在排查邮件头。
如果想简化配置,TrekMail 描述的服务包括按固定费用托管多个域名、不按用户收费、共享存储、内置 IMAP 迁移,以及 BYO SMTP 或 TrekMail 托管 SMTP 的选择。请在TrekMail 价格页核实当前套餐,或直接访问TrekMail。