邮件送达率与 DNS

邮件 SPF 记录:企业域名配置指南

作者:Alexey Bulygin
为企业邮件域名配置 SPF DNS TXT 记录

你的邮件被退回了。不是进入垃圾邮件文件夹,而是直接被拒收。服务器返回 550 5.7.26550 5.7.515,邮件没有送达。一个可能的原因是:域名缺少有效的邮件 SPF 记录,或现有记录存在结构错误。不过,仅凭这些代码无法断定问题只出在 SPF。

自 2024 年二月起,Google 和 Yahoo 开始执行更严格的发件人身份验证要求。具体要求取决于发件人类别、发送量等因素。SPF 配置错误可能导致拒收,但并不意味着所有企业域名的每封邮件都会被拦截。

Google:550 5.7.26 - 不接受未经身份验证的邮件

Microsoft:550 5.7.515 - 发件人身份未通过验证

本指南直接进入实际配置:不同发送方案对应的记录、看似正确却会出错的设置,以及检验实际发送路径的方法。SPF 是 SPF、DKIM 和 DMARC 这套身份验证体系的一部分。它们如何配合,可参阅企业邮件安全基础

什么是邮件 SPF 记录?

SPF 记录是发布在域名 DNS 中的一条 TXT 记录,用于声明哪些邮件服务器可以为该域名发送邮件。Gmail、Outlook 等接收服务器收到邮件时,会查询 DNS,并根据规则检查发送 IP。匹配授权规则可能得到 Pass;不匹配时的结果取决于末尾规则。是否接收邮件,仍由接收方结合自身策略和其他检查决定。

SPF 检查的是 SMTP 信封层,也就是 MAIL FROM 中的域名,而不是收件箱里显示的“发件人”地址。TXT 记录应发布在被检查的域名上。如果使用主域名,就是域名根节点(@);如果使用信封子域名,则应发布在那里。想了解各项 DNS 设置如何衔接,可阅读在自己的域名上设置邮件,从头完成配置。

一个域名只能有一条 SPF 记录

SPF 规范 RFC 7208 要求:每个被检查的域名只能有一条以 v=spf1 开头的 TXT 记录。如果接收服务器找到两条 SPF 记录,SPF 检查会返回 PermError。这属于身份验证错误,不只是垃圾邮件评分增加。是否因此拒收,取决于接收方策略。

给已经使用 Google Workspace 或其他邮件服务的域名添加新服务时,这是一种常见的严重错误:有人新增了第二条记录,而没有编辑现有记录。

修改之前,先检查域名已有的记录:

dig +short txt yourdomain.com

数一数以 v=spf1 开头的行。如果有两行,SPF 检查就会出现 PermError。应先修复这一结构问题。

情况结果
一条 SPF 记录,语法正确发送 IP 获得授权时,可能通过验证 ✓
同一域名有两条 SPF 记录SPF 检查返回 PermError ✗
域名没有 SPF 记录缺少 SPF 验证依据,可能因接收方要求而被拒收 ✗

错误示例:两条记录会让该域名的 SPF 检查返回 PermError:

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

正确示例:合并为一条邮件 SPF 记录:

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

邮件 SPF 记录:最小可用配置

SPF 记录的具体内容取决于实际发送邮件的服务器。只授权你正在使用的服务。每个额外的 include: 都会占用查询额度,并引入不由你控制的 IP 范围。

场景 A:TrekMail 托管 SMTP(Starter 和 Agency 套餐)

如果你购买的 TrekMail 套餐包含托管发送,而且没有其他发送来源,下面这一行可以覆盖该域名。使用前,请完整核对所有发件服务:

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

场景 B:TrekMail 免费套餐(自带 SMTP)

如果 Nano 套餐当前支持自带 SMTP,你可以连接 Amazon SES、SendGrid 或 Mailgun 等服务。应授权这些服务的发送服务器,而不是 TrekMail 的服务器:

v=spf1 include:amazonses.com -all

请将 include:amazonses.com 替换为服务商文档针对实际信封域名提供的配置。不要授权没有使用的 IP 范围。

场景 C:混合发送 - TrekMail + Google Workspace

正在从 Google 迁移,或在过渡期间同时使用两种发送路径?将它们合并到一条记录中:

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

记录的组成部分

组成部分作用
v=spf1版本标记,必须放在开头。
include:引用第三方服务商的 SPF 规则。
-all对未授权发送者返回 Hard Fail。完整核对发送来源后再使用;与 ~all 的结果不同,但不保证接收方一定拒收。

~all(Soft Fail)表示未匹配的发送者可能未经授权,并不保证邮件能送达或一定被拒收。-all 返回 Fail,适合在所有合法发送路径都已核对后使用。~all 可用于部署和排查阶段;应根据已确认的发送架构选择策略。

触发 DNS 查询的条目上限为 10

SPF 规范(RFC 7208)规定,每次检查所处理的、会触发 DNS 查询的机制和修饰符最多为 10 个。这不是所有独立 DNS 请求的总数限制。include:amxredirect 都计入,包括被引用记录中的相关嵌套条目。ip4:ip6: 不计入。处理数量超过 10 时,会返回 PermError

这类错误容易被忽略:SPF 记录能通过语法验证,因为语法确实没有问题。但接收服务器沿引用链继续检查,你的 include 引用了另一个 include,后者又引用其他记录,总数可能超过 10。此时 SPF 验证就会出错。

以下内容计入上限:

  • include:(以及其中嵌套的 include)
  • amxredirect

以下内容不计入:

  • ip4:ip6: - 直接列出 IP,不需要这条查询链
  • all

发布前,先检查记录及其引用的规则:

dig +short txt yourdomain.com

如果嵌套 include 链很长,可以将 include: 替换为直接的 ip4: 条目,即将记录扁平化。但此后必须及时跟踪并更新服务商的 IP 范围。另一种办法是将发送路径分配到合适的信封子域名,让它们使用各自的 SPF 记录和查询额度。

验证邮件 SPF 记录

不要只相信 DNS 控制台中的绿色对勾。语法验证不能证明邮件可送达。通过真实 SMTP 发送来测试,才能看到 Gmail 如何评估这条具体发送路径。

  1. 从你的域名发送一封邮件到自己控制的 Gmail 账号。
  2. 在 Gmail 中打开这封邮件。
  3. 点击三点菜单 → 显示原始邮件
  4. 查找 Authentication-Results

通过 SPF 验证的结果如下:

spf=pass (google.com: domain of team@yourdomain.com designates 192.0.2.1 as permitted sender)
结果含义修复方法
spf=softfail发送 IP 未获授权,匹配了 ~all 等规则补充合法发送来源;完整核对后再考虑改为 -all
spf=failIP 未获授权,-all 返回 Fail将合法发送 IP 加入记录
spf=permerror语法错误、存在两条记录,或触发查询的条目超过 10 个优先修复结构
spf=none被检查的域名没有 SPF 记录在信封域名发布 TXT 记录;若是主域名则使用 @

permerror 表示 SPF 处理存在错误,而不仅仅是发送 IP 没被列入。先检查重复记录、查询额度和语法,再处理其他问题。

常见 SPF 错误

许多 SPF 问题来自五种错误。识别原因后,通常可在 10 分钟内完成诊断和修改;DNS 更新生效和复测可能需要更久。

错误后果
使用 +all允许整个互联网为被检查的域名发送邮件。不要使用。
使用 ptr 机制SPF 规范不建议使用。速度慢,可靠性差。
include 域名拼写错误include:google.com 不是 Workspace 要求的记录。应使用 include:_spf.google.com
冒号后有空格ip4: 1.2.3.4 无效。必须写成 ip4:1.2.3.4,不留空格。
生产环境使用 ~all,却没有明确的策略依据Soft Fail 不保证伪造邮件被拒收。确认全部合法发送者后,可考虑 -all

include 拼写错误尤其棘手,因为只检查语法的工具不一定能发现引用的 SPF 记录无效。务必对照服务商文档,确认所需的 include 字符串完全正确。

管理多个域名的 SPF 记录

一个域名的简单 SPF 配置可能只需 10 分钟。管理 50 个客户域名,则是一项持续的维护工作。客户每添加一个营销工具,都可能悄悄改变或破坏身份验证配置。你甚至可能直到客户询问为什么邮件被退回时才发现。

对代理机构和 MSP 来说,标准化有助于降低维护成本。如果所选套餐包含相关功能,TrekMail 的多域名控制台和 SPF/DKIM/DMARC 配置向导可帮助统一设置。付费套餐宣传起价为每月 $3.50,具体价格及托管 SMTP 的可用性以当前条件为准。Nano 套餐若支持自带 SMTP,你可以使用自己的服务商;对 IP 信誉的控制也取决于服务商和共享或独享 IP 的分配方式。已有的 SES 或 Mailgun 账号可能派得上用场。

如果客户适合使用 TrekMail 的发送路径,可以采用统一模板,减少每个域名各自维护不同服务商组合的工作。但仍需逐一核对合法发送来源。有关规模化组织客户邮件,请参阅代理机构的客户邮件管理。如果从零开始配置域名邮件,可阅读使用自己的域名创建邮箱

邮件 SPF 记录:发布前检查清单

发布 SPF 记录前,请按顺序检查:

  1. 检查已有记录:dig +short txt yourdomain.com - 只能有一行 v=spf1
  2. 列出所有为该域名发送邮件的服务,包括事务邮件、营销和客服工具。
  3. 用一条记录覆盖所需发送来源。合并,不要叠加多条 SPF 记录。
  4. 完成全部发送来源核对后使用 -all;审慎评估 ~all,避免 +all
  5. 统计触发 DNS 查询的条目,包括嵌套规则;为留出余量,控制在 10 以下。
  6. 在被检查的信封域名发布 TXT 记录;若是主域名则发布在 @
  7. 发送测试邮件到 Gmail,在显示原始邮件中检查 spf=pass

Google 的邮件发件人指南按发件人类别区分要求。批量发件人需要同时使用 SPF、DKIM 和 DMARC,其他发件人的最低要求有所不同。正确配置 SPF 是重要的第一步,DKIM 和 DMARC 则补全身份验证体系。但全部验证通过,也不保证邮件一定被接收或进入收件箱。

认真配置 SPF,可以减少后续排查工作。服务商或 IP 范围变化时,应重新检查记录。配置错误可能影响企业邮件发送。免费试用 TrekMail:Nano 是否无需信用卡、付费套餐是否从每月 $3.50 起并提供 14 天试用,均以当前套餐条件为准。

分享这篇文章

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

登录 TrekMail

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

12 个字符 两次密码一致

重置邮件已发送

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

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