邮件送达率与 DNS

SPF 查询上限:嵌套记录与排查方法

作者:Alexey Bulygin
检查 SPF 查询预算和嵌套 DNS 依赖

SPF 查询上限是一类起初看似无害的 DNS 问题。再增加一个发件服务、一个 CRM、一个客服系统后,普通邮件可能被标记、延迟或拒收,因为 SPF 求值超过了协议规定的限制。

要理解 SPF 在整体配置中的作用,可以从企业邮箱开始。SPF 不只是品牌设置,而是收件方用来评估邮件的身份验证机制之一。

本指南介绍 SPF 查询上限、哪些项目会计入预算、手动扁平化带来的维护责任,以及如何建立在后续增长中仍可维护的配置。

什么是 SPF 查询上限?

SPF 查询上限限制 SPF 求值时需要 DNS 查询的相关机制和修饰符数量。根据RFC 7208,上限为 10;超过后返回 permerror,而不是成功结果。

简而言之,SPF 有查询预算。求值使用超过 10 个需要 DNS 查询的相关项时,实现应停止并返回永久错误。这不是 Gmail 的特殊规则,而是 SPF 标准的要求。

RFC 7208 明确列出消耗预算的项:includeamxptrexistsredirectip4ip6all 自身求值不需要这类查询。

这个区别很重要,因为人们常看记录长度,却忽视求值成本。短 SPF 也可能出错,长记录也可能通过。关键是实际执行路径涉及多少相关项。

哪些内容计入 SPF 查询上限?

SPF 查询上限计算的是需要 DNS 查询的机制和修饰符,不是 TXT 记录中的单词数。嵌套 include 也会计入,因此 DNS 面板里看到的数量往往少于收件方实际求值的数量。

以下项目消耗查询预算:

  1. include:求值另一域名的 SPF;对方返回 pass 时,include 机制可能匹配。
  2. a:解析主机名的 IP 地址,并与连接地址比较。
  3. mx:解析 MX 记录,再解析其服务器地址。
  4. ptr:使用反向解析名称;不建议使用。
  5. exists:检查指定的 A 记录查询是否返回结果。
  6. redirect:没有机制匹配时,将求值交给另一条 SPF 策略。

以下项目自身不消耗 SPF 查询预算:

  • ip4
  • ip6
  • all

陷阱在于递归。如果记录包含 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 的邮件发件指南

另有两个相关限制值得了解:

  1. 空查询结果,即 void lookups。RFC 7208 建议实现将其限制为两次。include 拼错或供应商域名失效,返回名称不存在或缺少所需答案时,可能导致 permerror。
  2. 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 要求域名完全相同。信誉影响仍需监测。

一种可选结构:

  1. 主域名用于人工商务邮件,例如 alice@company.com
  2. 营销子域名,例如 newsletter.company.com
  3. 客服子域名,例如 support.company.com
  4. 事务邮件子域名,例如 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 检查。

实用流程:

  1. 获取真实信封域名或子域名的 SPF TXT。
  2. 列出所有 includeamxexistsredirect;如果使用了不推荐的 PTR,也应计入。
  3. 解析各嵌套 SPF 记录,继续检查。
  4. 移除已确认不再发送邮件的工具。
  5. 先考虑把适当发送流分配到实际信封子域名,再评估手动扁平化。

也要检查同一名称是否发布了多条 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比较套餐。

分享这篇文章

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

登录 TrekMail

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

12 个字符 两次密码一致

重置邮件已发送

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

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