你的邮件被退回了。不是进入垃圾邮件文件夹,而是直接被拒收。服务器返回 550 5.7.26 或 550 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:、a、mx 和 redirect 都计入,包括被引用记录中的相关嵌套条目。ip4: 和 ip6: 不计入。处理数量超过 10 时,会返回 PermError。
这类错误容易被忽略:SPF 记录能通过语法验证,因为语法确实没有问题。但接收服务器沿引用链继续检查,你的 include 引用了另一个 include,后者又引用其他记录,总数可能超过 10。此时 SPF 验证就会出错。
以下内容计入上限:
include:(以及其中嵌套的 include)a、mx、redirect
以下内容不计入:
ip4:和ip6:- 直接列出 IP,不需要这条查询链all
发布前,先检查记录及其引用的规则:
dig +short txt yourdomain.com
如果嵌套 include 链很长,可以将 include: 替换为直接的 ip4: 条目,即将记录扁平化。但此后必须及时跟踪并更新服务商的 IP 范围。另一种办法是将发送路径分配到合适的信封子域名,让它们使用各自的 SPF 记录和查询额度。
验证邮件 SPF 记录
不要只相信 DNS 控制台中的绿色对勾。语法验证不能证明邮件可送达。通过真实 SMTP 发送来测试,才能看到 Gmail 如何评估这条具体发送路径。
- 从你的域名发送一封邮件到自己控制的 Gmail 账号。
- 在 Gmail 中打开这封邮件。
- 点击三点菜单 → 显示原始邮件。
- 查找
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=fail | IP 未获授权,-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 记录前,请按顺序检查:
- 检查已有记录:
dig +short txt yourdomain.com- 只能有一行v=spf1。 - 列出所有为该域名发送邮件的服务,包括事务邮件、营销和客服工具。
- 用一条记录覆盖所需发送来源。合并,不要叠加多条 SPF 记录。
- 完成全部发送来源核对后使用
-all;审慎评估~all,避免+all。 - 统计触发 DNS 查询的条目,包括嵌套规则;为留出余量,控制在 10 以下。
- 在被检查的信封域名发布 TXT 记录;若是主域名则发布在
@。 - 发送测试邮件到 Gmail,在显示原始邮件中检查
spf=pass。
Google 的邮件发件人指南按发件人类别区分要求。批量发件人需要同时使用 SPF、DKIM 和 DMARC,其他发件人的最低要求有所不同。正确配置 SPF 是重要的第一步,DKIM 和 DMARC 则补全身份验证体系。但全部验证通过,也不保证邮件一定被接收或进入收件箱。
认真配置 SPF,可以减少后续排查工作。服务商或 IP 范围变化时,应重新检查记录。配置错误可能影响企业邮件发送。免费试用 TrekMail:Nano 是否无需信用卡、付费套餐是否从每月 $3.50 起并提供 14 天试用,均以当前套餐条件为准。