SPF 查询上限是一类起初看似无害的 DNS 问题。再增加一个发件服务、一个 CRM、一个客服系统后,普通邮件可能被标记、延迟或拒收,因为 SPF 求值超过了协议规定的限制。
要理解 SPF 在整体配置中的作用,可以从企业邮箱开始。SPF 不只是品牌设置,而是收件方用来评估邮件的身份验证机制之一。
本指南介绍 SPF 查询上限、哪些项目会计入预算、手动扁平化带来的维护责任,以及如何建立在后续增长中仍可维护的配置。
什么是 SPF 查询上限?
SPF 查询上限限制 SPF 求值时需要 DNS 查询的相关机制和修饰符数量。根据RFC 7208,上限为 10;超过后返回 permerror,而不是成功结果。
简而言之,SPF 有查询预算。求值使用超过 10 个需要 DNS 查询的相关项时,实现应停止并返回永久错误。这不是 Gmail 的特殊规则,而是 SPF 标准的要求。
RFC 7208 明确列出消耗预算的项:include、a、mx、ptr、exists 和 redirect。ip4、ip6 和 all 自身求值不需要这类查询。
这个区别很重要,因为人们常看记录长度,却忽视求值成本。短 SPF 也可能出错,长记录也可能通过。关键是实际执行路径涉及多少相关项。
哪些内容计入 SPF 查询上限?
SPF 查询上限计算的是需要 DNS 查询的机制和修饰符,不是 TXT 记录中的单词数。嵌套 include 也会计入,因此 DNS 面板里看到的数量往往少于收件方实际求值的数量。
以下项目消耗查询预算:
include:求值另一域名的 SPF;对方返回 pass 时,include 机制可能匹配。a:解析主机名的 IP 地址,并与连接地址比较。mx:解析 MX 记录,再解析其服务器地址。ptr:使用反向解析名称;不建议使用。exists:检查指定的 A 记录查询是否返回结果。redirect:没有机制匹配时,将求值交给另一条 SPF 策略。
以下项目自身不消耗 SPF 查询预算:
ip4ip6all
陷阱在于递归。如果记录包含 Microsoft,而 Microsoft 的 SPF 又包含其他记录,相关的下游项也会计入总数。供应商的 SPF 结构因此成为你的依赖。
你认为只增加了 6 个发件服务,但递归后收件方可能需要求值 11 或 12 个相关项。这就是团队自认为仍低于 10,却超过 SPF 查询上限的原因。
为什么增长中的团队容易超过上限
SPF 查询上限问题常出现在添加工具之后,而不只是更换邮件托管之后。营销、客服、招聘、CRM 和事务邮件服务都希望向使用的信封域名 SPF 中添加一个 include,而该域名往往就是主域名。
最初的记录很简单。下列供应商值仅用于说明,请核查最新文档,不要直接套用:
v=spf1 include:_spf.google.com ~all随后工具不断增加:
v=spf1 include:_spf.google.com include:servers.mcsv.net include:mail.zendesk.com include:spf.hubspot.com include:amazonses.com ~all此时管理的不只是一个发件策略,而是一条可能在你控制范围之外变化的依赖链。
所以生产环境中的上限问题有时像随机发生。今天早上你没有修改 DNS,但供应商昨晚调整了内部 SPF。昨天通过的邮件,今天就可能返回 permerror。
如果投递问题不止 SPF,可继续查看 TrekMail 的邮件为何进入垃圾箱。验证问题和信誉问题可能同时存在。
超过 SPF 查询上限后会怎样?
超过SPF 查询上限时,求值返回 permerror。各收件方未必采取相同处理,但它们收到的是错误验证信号,而非正常 SPF 成功结果。
运维中容易低估这一点。接近合规并不会被算作部分成功。
| 状态 | 收件方看到的结果 | 可能影响 |
|---|---|---|
| 少于 10 个相关查询项 | 未超预算,但仍可能存在其他错误 | 匹配适当机制时 SPF 可以通过 |
| 超过 10 个相关查询项 | Permerror | 邮件可能被过滤、延迟或拒收 |
| SPF permerror 且 DKIM fail | 若无其他有效签名,则缺少成功且对齐的验证路径 | DMARC 可能失败,处理由收件方决定 |
| SPF permerror 且 DKIM pass | 不同方法结果不一致 | 有效且对齐的 DKIM 仍可让 DMARC 通过 |
Google 的发件要求也涉及身份验证与对齐。大量发往 Gmail 时,应按适用规则同时监测 SPF 和 DKIM,不要把 SPF 当作可忽略的管道配置。验证通过并不保证进入收件箱。参见 Google 的邮件发件指南。
另有两个相关限制值得了解:
- 空查询结果,即 void lookups。RFC 7208 建议实现将其限制为两次。
include拼错或供应商域名失效,返回名称不存在或缺少所需答案时,可能导致 permerror。 - DNS 响应大小。很大的响应可能被截断并需要切换传输方式,网络存在问题时可能出现临时错误或超时。
为什么 SPF 扁平化未必合适
SPF 查询上限让扁平化看起来很诱人:把 include 换成直接 IP 地址,就不再消耗对应查询预算。但同时也产生了新的维护任务。
手动扁平化的示例如下:
v=spf1 ip4:192.0.2.10 ip4:192.0.2.11 ip4:198.51.100.0/24 -all它降低了求值成本,但 SaaS 供应商会更换基础设施、添加地址范围或换服务商。扁平记录过期后,合法邮件可能不再获准;已经移除的范围也可能被授权过久。
不易维护的方式是把所有供应商堆进主域名 SPF,每次复杂起来就再次手动展开 IP。
更有条理的方式是将发送功能分配到适当子域名,缩小策略范围,并使用对齐的 DKIM。SPF 必须实际使用不同的信封域名,仅修改可见 From 不起作用。这样也便于定位责任来源,但不保证信誉完全隔离。
TrekMail 是否能简化该架构取决于套餐。按当前文档,可提供自定义域名、IMAP 邮箱、catch-all、迁移、转发及 BYO SMTP 或托管 SMTP。免费套餐是否含 BYO SMTP、付费套餐是否含托管 SMTP,应核查当前条件;功能与计费均依套餐而定。DNS 说明见必需 DNS 记录,发送选择见自定义 SMTP(BYO)。
更可持续的 SPF 上限解决方案
应对SPF 查询上限的长期策略之一是分流。企业往来、营销、客服和事务邮件可使用独立的信封子域名,让 SPF 求值分别拥有预算。还需核查 DMARC 对齐:relaxed 可按符合要求的组织域名判断,strict 要求域名完全相同。信誉影响仍需监测。
一种可选结构:
- 主域名用于人工商务邮件,例如
alice@company.com。 - 营销子域名,例如
newsletter.company.com。 - 客服子域名,例如
support.company.com。 - 事务邮件子域名,例如
updates.company.com。
记录示例:
company.com TXT "v=spf1 include:_spf.google.com ~all"
newsletter.company.com TXT "v=spf1 include:servers.mcsv.net ~all"
support.company.com TXT "v=spf1 include:mail.zendesk.com ~all"
updates.company.com TXT "v=spf1 include:sendgrid.net ~all"每个真正独立求值的信封域名策略都有 10 个相关项的预算。这可能减少全公司依赖一条拥挤 SPF 的问题,但每条记录仍需单独核查。
分流也便于分析信誉。然而,不良营销做法仍可能通过共享 IP 或组织域名评价影响其他发送流,不会自动形成信誉防火墙。
新建域名时,TrekMail 的添加域名和 DNS 验证说明可作为参考。离开旧服务商时,IMAP 迁移概述所述功能可协助复制邮箱数据,但不会自动迁移 DNS、应用配置或发送路径,也不保证没有中断。
如何检查 SPF 查询预算
应实际测量SPF 查询上限,而不是猜测。先获取原始 TXT 记录,再追踪 include 和嵌套记录,了解可能执行路径的成本。
先使用 dig:
dig txt example.com +short
dig txt _spf.google.com +short
dig txt spf.protection.outlook.com +short随后统计执行路径中所有相关 DNS 查询项,包括嵌套项。求值可能在匹配后停止,所以应结合实际发送 IP 检查。
实用流程:
- 获取真实信封域名或子域名的 SPF TXT。
- 列出所有
include、a、mx、exists和redirect;如果使用了不推荐的 PTR,也应计入。 - 解析各嵌套 SPF 记录,继续检查。
- 移除已确认不再发送邮件的工具。
- 先考虑把适当发送流分配到实际信封子域名,再评估手动扁平化。
也要检查同一名称是否发布了多条 SPF。TrekMail 建议将授权来源合并为一条 SPF TXT 记录,而不是为同一主机发布多条 SPF。单个 TXT 记录在技术上可以包含多个字符串片段。相关参考有使用域名创建邮箱、多域名邮件托管和imapsync。
TrekMail 在清晰配置中的作用
TrekMail 不会取消SPF 查询上限,托管服务无法移除协议限制。但其功能可能帮助建立遵守限制的架构。
这对两类用户有意义。
独立创始人和小团队可让主域名商务邮件保持简单策略,再按需求使用 BYO SMTP 或托管 SMTP。代理机构和 MSP 可分开客户发送流、集中添加域名。是否减少成本与账户管理,取决于套餐和实际用量。
传统方式与结构化方式:
传统方式:因新增邮箱或域名的费用,把企业往来、别名、应用和营销集中到同一服务及 SPF。
结构化方式:多域名平台集中管理 IMAP 邮箱,但由实际信封子域名分开发送流,并在供应商变化后检查 SPF。
本文列出的条件中,Starter 从每月 $3.50 起,免费套餐为 $0,包含 10 个域名、5GB 共享存储和 BYO SMTP。付费套餐可能增加托管 SMTP、更高限额及自动化。请核查最新条件,并在TrekMail 价格页面估算架构费用。
结论:把 SPF 上限当作设计约束
SPF 查询上限不是罕见例外,而是协议的固定要求。工具不断增加时,应定期检查求值成本,不要等超过上限后才行动。
别等到 permerror 才发现配置拥挤。建立发件来源清单,移除无用 include,将适合的发送流分配到真实信封子域名,并保持主域名简单。这有助于降低重要商务邮件的风险,但不保证送达。
在一个或多个域名上实施该架构时,TrekMail 按当前套餐提供自定义域名、IMAP 邮箱、共享存储、迁移和不同 SMTP 选择。费用和限制以套餐为准。可在trekmail.net了解免费起步条件,或在trekmail.net/pricing比较套餐。