邮件送达率与 DNS

SPF 查询过多:检查引用链并修复超限错误

作者:Alexey Bulygin
SPF 查询过多与 PermError 原因示意

SPF 的 DNS 查询过多乍看是小错误,但一旦邮件出问题,后果就可能迅速扩大。域名超过 SPF 查询限制时,接收方可能返回 PermError,无法获得正常的 SPF 认证结果。发票、回复、告警和应用邮件都可能因此无法通过 SPF 检查。

如果你正在改善邮件送达能力、建立规范的商务邮箱,这也是同一项工作的组成部分。TrekMail 的小企业商务邮箱指南介绍整体配置;本文则专门说明 SPF 查询过多的原因,以及如何修复而不取消正常发送服务的授权。

简而言之:SPF 在评估中最多允许 10 个触发 DNS 的项。计数包括递归评估的引用,你的供应商及其下层记录都可能占用预算,拼写错误或停用的 include 也可能参与其中。超过限制后,SPF 查询过多就是实际认证问题,而非可以忽略的警告。

SPF 的 DNS 查询过多是什么意思?

这表示接收服务器在评估 SPF 记录时,需要处理超过 10 个触发 DNS 的项。根据 RFC 7208,此时必须返回 PermError。SPF 策略无法正常完成评估,也就不能提供预期的认证结果。

这条规则用于限制滥用和开销过高的 DNS 递归,并非可选建议。RFC 7208 要求超限时返回 PermError;Microsoft 的 SPF 文档也指出,查询过多会导致 SPF 失败。

因此,多年来不断添加工具的域名特别容易出问题:Google Workspace、Microsoft 365、CRM、工单系统、邮件简报平台,可能还有转发或中继服务。每个 include 单独看都很简单,问题出在整个引用链。

“只有三个 include”并不能说明没有风险。一个 include 可能展开成多个下层引用。判断 SPF 是否超限,要看完整评估路径,而不是粘贴到 DNS 中的第一行。

哪些 SPF 机制计入限制?

只有部分 SPF 机制需要查询 DNS。这一区别很重要:在条件允许时,用更直接的发送授权替代递归逻辑,往往能更快降低开销。要审计记录,先要知道哪些项计数。下表是简化示意,并不等于实际 DNS 数据包数量。

机制查询开销说明
include:1常见的超限来源,因为递归会继续进入下层记录。
a1查询 A 或 AAAA 记录。
mx1+解析 MX,并可能触及额外的 MX 子限制。
ptr1+明确不建议使用,应避免。
exists1用于较复杂或大量使用宏的配置。
redirect=1将 SPF 处理交给另一条记录。
ip4 / ip60静态条目,评估时无需查询 DNS。
all0只定义最终策略,不占查询预算。

还有一个陷阱:RFC 7208 建议将空查询限制为两次,指返回 NXDOMAIN 或没有数据的查询。超过这一限制可能让排查更复杂:即使你认为总数低于 10,记录仍可能评估失败。

例如,拼写错误的 include:spf.trekmaill.net 可能产生一次空查询。引用链中有两个无效域名时,应检查是否还存在其他空查询;超过接收方的空查询限制可能返回 PermError,而不必等到总预算超限。

如何审计 SPF 查询过多的问题?

从主 SPF 记录开始,展开每个 include,并在实际评估路径上累计触发 DNS 的机制。不要凭估计,也不要依赖旧截图。查询记录树,核实当前 DNS 中实际发布的内容。

先检查主记录:

dig +short txt example.com

然后展开找到的每个 include:

dig +short txt _spf.google.com

# or

dig +short txt spf.protection.outlook.com

dig +short txt spf.trekmail.net

沿引用链检查时,计入实际评估的每个 includeamxexistsredirect,嵌套记录也要算。如果供应商近期更改了自己的 SPF,原本正常的记录可能突然超限,即使你没有修改任何内容。

简要审计清单:

  1. 读取域名当前的 SPF TXT 记录。
  2. 递归展开所有被包含的域名。
  3. 统计完整评估路径中所有触发 DNS 的机制。
  4. 检查拼写错误、停用供应商和空响应。
  5. 先删除重复服务,再考虑复杂方案。

如果同时设置新域名,TrekMail 的必需 DNS 记录指南介绍了应当保持的基本记录结构。

什么通常会造成 SPF 查询过多?

通常不是某个严重失误,而是供应商不断累积。许多出问题的记录都是在几个月或几年里逐个加上 include。没有人负责整条策略,记录就不断增长,直到认证出错。

常见原因并不复杂:

迁移后没有删除旧供应商;营销工具与企业邮箱使用同一主域名;不同团队分别授权发送服务,却没有共享清单;有人复制供应商的 SPF 示例,却未检查其包含多少嵌套 include。

自定义 SMTP配置也常带来这类问题。多个出站服务共用主域名,会增加 SPF 超限风险。TrekMail 的托管 TrekMail SMTP可通过一个 include 入口简化配置,但下层引用仍需检查。使用 BYO SMTP 时,则要自行管理每家服务商的 SPF 开销。

所以,代理机构往往比单域名企业更容易遇到问题。历史配置散布在多个客户的 DNS 区域中,一个遗忘的 include 可能保留多年。

实用的修复方法:按子域名拆分邮件流

一种清晰的架构方案,是把不同邮件流移到不同子域名。每个子域名有自己的 SPF 记录和查询预算,主域名可以保持简洁,大量发送服务则单独配置。

例如:

# Root domain for staff and transactional mail
example.com. TXT "v=spf1 include:spf.trekmail.net -all"

# Marketing subdomain for bulk mail
news.example.com. TXT "v=spf1 include:servers.mcsv.net include:spf.mailvendor.com -all"

SPF 检查的是信封发件人,而不只是可见的 From 邮件头。因此,客服邮箱与简报工具不必争用同一 SPF 预算。

遇到 SPF 超限时,我会优先考虑这一方案。它有助于限制影响范围、减轻主域名配置负担,也便于管理营销邮件的声誉风险。不过,仅使用子域名并不保证主域名稳定,也不保证声誉完全隔离。

如果正在重新划分域名职责,可以参考这些 TrekMail 文章:如何创建使用自己域名的邮箱多域名邮箱托管

是否应该通过展开 SPF 来解决查询过多?

展开 SPF 可以将 include 链替换为直接的 ip4ip6 条目,降低查询开销。静态 IP 机制在 SPF 评估时不查询 DNS,但代价是维护工作:供应商调整基础设施后,静态条目可能过时。

展开前:

v=spf1 include:spf.example-vendor.com -all

展开后:

v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.12 -all

以下情况可以考虑展开:

  1. 供应商公开稳定的 IP 范围。
  2. 有自动化机制更新记录。
  3. 需要临时处理紧急发送故障。

以下情况风险较高:

  1. 供应商经常更换 IP。
  2. 需要手动管理很多域名。
  3. 没有监控来发现配置偏差。

因此,展开 SPF 能减少查询开销,但未必是合适的长期方案。缺乏维护时,只是把一种故障风险换成另一种。

处理 SPF 查询过多的旧方式与新方式

许多团队采用旧方式:继续修改 DNS,然后希望不会出问题。更好的思路是减少依赖,让发件服务更少、域名职责更明确,并把日常商务邮件集中到一个托管平台。它不如“高级 SPF 优化”听起来华丽,但通常更容易维护。

旧方式新方式
不断给主域名添加第三方 include保持主域名精简,将批量发件服务移至子域名
每项业务流程使用不同邮件系统把日常商务邮件集中到一个平台
手动展开记录后忘记更新尽可能使用托管发送,仅在有自动更新时展开
送达情况变差后才排查 SPF每次更换供应商都审计查询开销

TrekMail 可以适用于这类配置。对普通企业和代理机构而言,一个 SPF include 通常比多家旧供应商的拼接记录容易管理,但仍需核实其下层评估路径。所描述的服务包括自定义域名、IMAP 邮箱、catch-all、转发、迁移工具、API,以及 BYO SMTP 或付费套餐内的 SMTP。Starter 在文中起价为每月 $3.50,按年计费;付费套餐描述了 14 天免费试用,需要信用卡。Nano 被描述为免费且无需卡片。请在使用前核实最新功能和条件。

如果准备迁移已有邮件,而不是继续维护复杂的旧主机,TrekMail 的IMAP 迁移概览介绍了迁移流程。

SPF 查询过多已经影响邮件时,立即该做什么?

如果生产环境正在受影响,应先为最重要的邮件流恢复有效的 SPF 配置。通常要删除停用的 include、分离营销发送服务,并把主域名记录缩减为实际商务邮件所需的最少授权。

  1. 列出域名的所有活跃发送服务。
  2. 删除已取消或重复服务的 include。
  3. 条件允许时,将批量或应用邮件移至子域名。
  4. 让主记录保持简短且易于理解。
  5. 每次修改后重新测试,不要盲目合并多项变更。

TrekMail 托管发送的简洁主记录示例:

v=spf1 include:spf.trekmail.net -all

与其他发送服务合并的记录可能如下:

v=spf1 include:_spf.google.com include:spf.trekmail.net -all

还要记住一个常见陷阱:每个域名只应发布一条 SPF TXT 记录。发布两条独立 SPF 记录会产生另一类错误。

清理后,继续观察几天 DMARC 和认证结果。SPF 查询过多常常是更广泛的 DNS 维护问题的一部分,所以不能在看到第一处绿色状态后就停止检查。

总结:如何降低 SPF 再次超限的风险

长期方案是简化架构,而不是让 DNS 更复杂。主域名保持精简,批量工具使用子域名,在适当情况下整合发送服务。只有能持续维护时才展开 SPF。每次增加供应商,都要审计完整 include 树。

这就是基本方法。无人维护发件服务清单时,SPF 问题容易累积;有明确负责人和最新清单,修复就更有条理。

如果想要更简洁的起点,TrekMail 描述的多域名邮箱托管包含较低的 DNS 配置负担、共享存储、内置 IMAP 迁移,以及不按用户收费的模式。可以了解免费套餐,或在TrekMail 价格页比较当前付费套餐。相邻的清理工作还可参考邮件转发设置与故障修复

SPF 查询过多是可以修复的,但不要把它当作外观上的警告。它意味着认证配置存在问题,应认真处理。

来源:RFC 7208Microsoft SPF 指南

分享这篇文章

我们使用运行和保护 TrekMail 所必需的技术。确认后还会允许《Cookie 政策》中所述的有限分析和广告衡量。

登录 TrekMail

访问您的控制面板、邮箱和 DNS。

12 个字符 两次密码一致

重置邮件已发送

如果该邮箱对应已有账户,我们已发送密码重置说明。

继续即表示您同意 TrekMail 的 服务条款隐私政策.