Defaults.Exposed

Defaults.Exposed修复Guides

SPF PermError:如何在不弄坏邮件的前提下修复"DNS 查询次数过多"(2026)

发布于 2026-07-08

数据截至 2026-06-29 · 方法论 v7。 基于 261 百万个已评分域名的汇总普查数据。参见我们如何评分

根据 Defaults.Exposed 对 261,086,232 个域名的普查——出自 139 百万个 SPF 发布者——至少有 797,263 个域名超出了 SPF 10 次 DNS 查询的上限。超过十次,接收方就会停止解析并返回 PermError:你的 SPF 作废,而 DMARC 会把 PermError 算作一次失败。

修法有严格的顺序,而大多数指南都搞反了。先数清你真实的、已解析的查询次数;删除失效和不再使用的 include——光这一步就能修好大多数记录;把大宗发信方移到有自己 SPF 预算的子域名上;只在万不得已时才做扁平化,而且只用会自动重新扁平化的方式,因为静态扁平化会腐化,并且会悄无声息地破坏送达率。

“SPF PermError:DNS 查询次数过多”是什么意思?

RFC 7208 §4.6.4 把每次 SPF 检查的上限定为 10 次 DNS 查询。超过十次,接收方就会停止解析,返回 PermError——整条记录都会被当作损坏处理,而不只是超出预算的那部分。同一节里还有一个不太为人所知的第二道上限:最多允许 2 次“空查询”(返回无结果或 NXDOMAIN 的查询),所以哪怕只是几个指向已停用服务的失效 include: 条目,单靠它们自己就足以让你的 SPF 作废。

后果比“没有 SPF”还要糟:DMARC 把 PermError 当作 SPF 失败处理,所以一个自己弄坏了 SPF 的域名,在每一次 DMARC 评估里 SPF 这条腿都是未认证的。如果 DKIM 没配好,或者在传输途中出了问题,这些邮件就会彻底 DMARC 失败。

有一个普查数字最能说明这种失败方式有多残酷:有 112,215 个域名发布了严格的 -all 记录,却因为查询次数超标而作废——这是在总共发布 -all 的 54,655,923 个域名里统计出来的。它们的所有者已经做对了最难的那部分——选择了严格的结尾——结果多加了一个 include,就把整条记录关掉了。它们看起来很严格;实际上是坏的。完整数据见 SPF PermError 报告

为什么我什么都没改,SPF 却坏了?

因为这个预算大部分是被别人的记录花掉的。每一个 include: 都是递归求值的,它内部的每一个查询机制都会算进你的十次配额里。DNS 面板里的一行,解析开之后可能要花掉四五次查询。某个服务商在里面又嵌套了一个 include,你的 SPF 就死了,而你的区域文件里连一个字都没改过。

大平台不是问题所在:Google 和 Microsoft 都已经把自己的 SPF 扁平化了——_spf.google.comspf.protection.outlook.com 展开后就是纯 IP 列表,内部查询成本为(对照实时 DNS 核实,2026 年 7 月)。真正的爆表往往来自主机面板里嵌套了好几层的 include 链,以及诚实的 SaaS 堆叠——邮箱加通讯工具加 CRM 加工单系统,每个都“只是一个 include”。没有人是故意加上第十一次查询的;它是一系列合理决定累加出来的结果。这就是为什么悬崖边上挤满了域名:有 2,119,539 个域名正好处在 9–10 次已解析查询——大约每 66 个 SPF 发布者里就有 1 个,今天还没事,哪天有人再粘贴进一个 include 就作废了。SPF 记录的第 99 百分位已经解析到 9 次查询。如果你的技术栈以 SaaS 为主,SPF 在 SaaS 工具上失败的指南 覆盖了按服务商拆解的版本。

SPF 记录里哪些部分算作 DNS 查询?

机制查询成本备注
include:1 次 + 其内部的一切,递归计算几乎所有爆表都源自这里
a每个 1 次即便是你自己域名的裸 a 也算
mx每个 1 次(外加 MX 主机的 A 记录查询)经常被忽略
ptr1 次——而且自 2014 年起已被弃用不管怎样都该删掉
exists:每个 1 次少见
redirect=1 次 + 目标记录的内容计算方式和 include 一样
ip4: / ip6:0这正是扁平化管用的原因
-all / ~all / ?all0限定符本身不计费

数的是解析后的总数,不是看得见的行数。四个 include 可能是四次查询,也可能是十四次。

怎么在不弄坏邮件的前提下修复“DNS 查询次数过多”?

  1. 动 DNS 之前,先运行免费扫描 它会解析你完整的 include 链,显示你真实的查询次数,让你修的是真正的问题——而不是面板里看起来的那个样子。(如果它说你根本没有 SPF,那是另一种失败——见 “SPF 记录未找到”。)
  2. 先删除失效和不再使用的 include。 2023 年就不用了的工具、迁移后残留的旧主机 include、重复项、任何 ptr 机制。失效的 include 有双重毒性:既消耗查询预算,又是空查询最常见的来源。大多数超标记录光靠这一步就能重新回到 10 次以下。如果你的记录里还带着上一个服务商的机制,参照迁移清理指南
  3. 检查剩下的每个 include 是否还有作用。 接收方是对照 Return-Path(RFC5321.MailFrom)域名,而不是 From 标头来评估 SPF 的——而很多 SaaS 工具会把它们自己的退信域名放在 Return-Path 上,所以你记录里它们的 include 除了消耗预算之外什么作用都没有。只为那些真正用你的域名做 Return-Path 的服务保留 include;其余的改用服务商的自定义域名 DKIM。
  4. 把大宗发信方移到子域名。 通讯邮件用 news.yourdomain.com,事务性邮件用 mail.yourdomain.com。每个子域名都有自己独立的 SPF 记录和全新的 10 次查询预算,某一条流里的问题也不会波及其他流。
  5. 只有到这一步才考虑扁平化——而且只做自动化的扁平化。 见下文。
  6. 重新扫描以确认你稳稳低于 10 次——目标是留有余量,而不是刚好卡在 10 上,否则你又重新加入了悬崖边上那 2.1 百万个域名的行列。然后处理修复 SPF 页面标出的其他问题。

我该不该扁平化我的 SPF 记录?

扁平化就是把 include 替换成它们底层的 ip4:/ip6: 网段,查询成本为零。这确实管用——但如果是手动做的,就是一场延迟发作的送达率事故。

做法查询次数随时间推移
精简 + 子域名(第 2–4 步)通常能回到 10 次以下稳定;服务商自己管理自己的 IP
自动化扁平化(服务或定时任务会重新解析并 republish)接近 0能跟上服务商的 IP 变化;安全
一次性手动扁平化接近 0——但只是今天会悄悄腐化:服务商会轮换 IP,合法邮件开始 SPF 失败,而你这边不会有任何报错

服务商会定期轮换发信 IP,而且从不通知任何人。一份静态 IP 列表在你粘贴进去的那一天是对的,几个月内会悄悄变错——而因为这种失败表现为别人收不到你的邮件,你往往很晚才会发现。如果精简和子域名已经能让你回到上限以下,就到此为止;永远不要把第三方的 IP 网段手动抄进你的记录当作永久解决方案。

常见问题

SPF PermError 是不是意味着我的邮件会立刻停止送达? 不会立刻——这正是它危险的地方。DMARC 把 PermError 算作 SPF 失败,所以送达完全依赖 DKIM;如果 DKIM 缺失或在传输中出问题,你就是在 DMARC 失败。在我们普查的 139 百万个 SPF 发布者中(截至 2026-06-29),至少有 797,263 个处于这种状态——大多数人对此一无所知。

我的记录只有四个 include——怎么会超过 10 次查询? Include 是递归计数的:每个 include 内部(以及它自己的 include 内部)的一切都算进你的预算,所以四行看得见的记录,解析出来可能是十四次查询。要用能递归解析的工具来数,不能靠肉眼——正是靠解析这些链条,我们的 PermError 报告 才发现了比表面数字多出约 100 倍的损坏域名。

我的记录以 -all 结尾——那我肯定是受保护的吧? 只有在记录能正常求值的前提下才是。我们的普查(截至 2026-06-29)发现有 112,215 个域名的严格 -all 记录因为查询超标而作废。一个 PermError 记录上的严格限定符起不到任何保护作用。

10 次查询的上限是针对每个 include,还是针对整条记录? 是针对整次评估:RFC 7208 §4.6.4 把完整检查的上限定为 10 次,外加最多 2 次空查询。每个子域名都有自己独立的记录和预算——这也是第 4 步管用的原因。

ip4 和 ip6 条目算进上限吗? 不算——IP 机制不花任何查询成本,这正是扁平化能降低查询次数的原因。

把报告发给老板

如果你是在替客户或雇主修这个问题,用证据来收尾。改动生效后重新运行免费扫描,把评分报告转发给企业负责人:语言直白、带日期、PermError 已消失。这是他们在网络保险续保和下一份客户安全问卷时需要的凭证——“我改了几条 DNS 记录”和一份记录在案的前后对比,区别就在这里。

免费检查你的域名

私密、仅域名所有者可见地看看你真实的、已解析的查询次数——以及 SPF、DKIM 和 DMARC 的其他一切。

检查你的域名 → · 修复 SPF → · SPF 在 SaaS 工具上失败 → · 在 GoDaddy 上设置 SPF → · 我们如何评分 → · 仅使用汇总数据。数据在欧盟境内存储和处理。