邮件送达率与 DNS

转发邮件 DMARC 失败的原因与排查方法

作者:Alexey Bulygin
通过邮件标头分析转发后的 DMARC 失败

DMARC 失败的工单往往在配置似乎已经完成后出现。SPF 已发布,DKIM 已启用,DMARC 策略也终于设为 p=quarantinep=reject。但一封真实邮件经过转发后没有送达。邮件可能既非伪造,也非垃圾邮件,只是经过了配置未充分考虑的路径。

这就是转发中常见的DMARC 失败问题。邮件本身合法,但转发节点改变了投递环境或内容,收件方无法再获得足够的验证结果。如果只把 SPF 和 DKIM 当成设置页面上的勾选项,问题就像随机发生。实际上,很多情况都有可追踪的规律,可以据此定位原因。

需要先建立基础配置的话,请从企业邮箱开始。如果系统已经使用转发,也可以结合邮件转发阅读。

DMARC 失败究竟是什么意思

DMARC 失败表示邮件没有获得与可见 From 域名对齐的 SPF 成功结果,也没有有效且对齐的 DKIM 签名。单独通过身份验证还不够,DMARC 还要判断验证域名是否与收件人看到的发件域名对齐。

DMARC 建立在 SPF 和 DKIM 之上。历史规范RFC 7489所描述的基本原则是,满足以下任一条件即可通过:

  1. SPF 通过,并与 Header From 域名对齐。
  2. DKIM 通过,并与 Header From 域名对齐。

听起来很简单。实际运维中,DMARC 失败常与混淆以下概念有关:

  • 身份验证:SPF 或 DKIM 是否通过?
  • 对齐:通过验证的域名是否与 Header From 域名对齐?
  • 转发后的完整性:签名所涉及的数据是否仍然有效?

SPF 通过时也可能出现DMARC 失败。DKIM 通过时同样可能出现DMARC 失败。如果通过验证的身份属于未对齐的域名,DMARC 不会将它视为足够的成功结果。

为什么转发容易导致 DMARC 失败

转发可能导致DMARC 失败,因为它会改变路径,有时也会改变内容。SPF 依赖连接来源,DKIM 依赖签名数据。转发可能使其中一种方法失败,不当修改则可能影响两种方法。

常见路径如下:

  1. 发件人从 sender.com 发送邮件。
  2. 中间邮箱或网关接收邮件。
  3. 该系统自动转发到 Gmail、Outlook 或其他目的地。

此时,最终收件服务器看到的 SMTP 客户端不再是原始发件 IP,而是转发服务器的 IP。

这可能就是DMARC 失败的起点。

SPF 可能首先失败

SPF 由RFC 7208定义,用于检查连接 IP 是否获准代表信封域名发送邮件。

转发后,连接来自转发服务器而非原始发件服务器,所以 SPF 可能失败。SRS 可重写信封发件人,使新域名的 SPF 有机会通过,但不会自动恢复与原始 From 的 DMARC 对齐。

原始路径:sender.com 从 IP A 发送,SPF 通过。
转发路径:中间服务器从 IP B 转发,收件方用 IP B 检查 sender.com。如果该 IP 未获授权,SPF 就会失败。

SPF 失败本身并不必然导致DMARC 失败。如果对齐的 DKIM 仍然有效,DMARC 依然可以通过。这正是可靠配置 DKIM 的重要原因。

DKIM 可以保留验证成功结果

RFC 6376定义的 DKIM 对选定标头和正文签名。转发 IP 不参与签名验证,因此当 SPF 失败时,DKIM 可能保留 DMARC 成功结果。

但需要同时满足以下条件:

  1. 转发后签名仍然有效。
  2. d= 域名与可见 From 域名对齐。

其中一个条件不满足,且没有其他对齐的成功方法,就会出现DMARC 失败

转发服务可能进行看似细小却影响签名的修改:

  • 在主题中添加 [EXTERNAL]
  • 追加免责声明或法律页脚
  • 重写 MIME 边界
  • 改变换行或空白字符

Relaxed 规范化能容忍部分变化,但不是所有修改。网关可能破坏签名。因此,转发邮件的DMARC 失败可能来自实现问题;失败本身既不能证明伪造,也不能证明没有伪造。

没有转发也会发生的域名对齐问题

DMARC 失败并不需要转发。SaaS 发件服务使用自己的域名验证,而不是与企业 From 对齐的域名时,也可能失败。邮件是真实的,验证身份却未对齐。

运维中经常忽略这个区别。

例如:

  • From:billing@yourcompany.com
  • Return-Path:bounce.vendor-mail.com
  • DKIM:d=vendor-mail.com

vendor-mail.com 的 SPF 可能通过,vendor-mail.com 的 DKIM 也可能通过。但 DMARC 仍会显示失败,如果没有其他成功验证域名与 yourcompany.com 对齐。

解决办法是正确设置自定义域名验证。对齐的 DKIM 对转发尤其有用;直接投递时,对齐的 SPF 也可能足以使 DMARC 通过。

如果正在调整大量依赖别名的配置,可以阅读域名邮箱别名与独立邮箱,梳理其中隐藏的转发路径和责任归属。

如何通过标头排查 DMARC 失败

不少DMARC 失败案例可以通过查看标头更快定位。先检查由可信收件服务器添加的 Authentication-Results,再比较 SPF、DKIM 和对齐域名,不要盲信邮件中任意同名标头。

请收件人提供完整标头。以下是一个示例:

Authentication-Results: mx.google.com;
       spf=fail smtp.mailfrom=sender.com;
       dkim=pass header.i=@sender.com header.s=mail;
       dmarc=pass header.from=sender.com

这与转发导致 SPF 失败、DKIM 保持有效的情况一致。DMARC 通过了,但不能据此排除其他投递问题。

下面的结果需要进一步调查:

Authentication-Results: mx.google.com;
       spf=fail smtp.mailfrom=sender.com;
       dkim=fail header.i=@sender.com;
       dmarc=fail header.from=sender.com

这可能是典型的转发DMARC 失败:路径变化影响 SPF,内容变化或原本无效的签名影响 DKIM。但仅凭结果还不能确定全部原因。

标头结果可能含义处理方式
spf=faildkim=passdmarc=pass与常见转发行为一致继续监测;若有其他症状,检查完整路径。
spf=faildkim=faildmarc=fail转发修改内容,或存在其他 DKIM 问题检查签名、规范化和实际修改。
dkim=pass,但 d= 域名未对齐可能是 ESP 或中继的对齐问题配置对齐的 DKIM,并检查其他成功身份。
spf=permerrorSPF 可能过于复杂或格式错误定位具体错误,移除无用 include;考虑扁平化时需持续维护 IP 变化。
arc=passARC 链的密码学验证通过评估中间服务的可信度和收件方策略;不等同于 DMARC 通过。

如何减少转发邮件的 DMARC 失败

无法阻止用户转发邮件。减少DMARC 失败更适合从设计着手:使用对齐的 DKIM、可维护的 SPF,以及尽可能保留签名数据的转发路径。

1. 为各类发送流配置 DKIM

要让合法邮件在转发后尽可能保留验证结果,对齐的 DKIM 是重要支撑。为所有可控的出站邮件流签名,而不只是新闻通讯或客服邮件。

签名域名需要与可见 From 对齐。如果 From 使用 yourdomain.com,签名可以使用 yourdomain.com,或在 relaxed 对齐模式下使用符合要求的子域名。严格对齐要求域名完全相同。

TrekMail 的 DNS 配置可从必需的 DNS 记录开始。黄色或红色状态应进一步检查;绿色状态也不保证所有转发场景都成功。

2. 评估 DKIM relaxed 规范化

Simple 规范化对细小格式变化更敏感,可能间接导致DMARC 失败。Relaxed 可容忍标准规定的空白和标头格式变化,不是任意内容修改。

DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=mail;
 c=relaxed/relaxed; h=from:to:subject:date:message-id; ...

在正文末尾添加一大段页脚通常仍会破坏签名。它能容忍的仅是标准定义的规范化变化。

3. 核查供应商的域名验证

CRM、客服或营销工具使用 d=vendor.com 时,应检查对齐和其他签名,而不是只看到供应商域名就认定错误。如果缺少对齐的 DKIM,转发可能使剩余 SPF 路径失效,产生DMARC 失败。配置适当的自定义 DKIM,必要时设置自定义 Return-Path。DMARC 并不要求两种方法同时通过。

4. 让 SPF 保持可评估

SPF 不只会在转发时失败,臃肿配置也可能出错。RFC 7208 将 SPF 求值时触发 DNS 查询的相关机制和修饰符的数量上限设为 10,包括相关嵌套项。超过而非刚好达到上限,可能产生 permerror,使 SPF 无法成为成功的 DMARC 路径。

dig +short TXT example.com

dig +short TXT _dmarc.example.com

如果同一条 SPF 中堆积了 Google、Microsoft、Mailgun、SendGrid、Zendesk 和三个旧主机服务,检查哪些仍然需要。适当分配子域名可能有帮助,但必须符合实际信封域名。

5. 了解 SRS 和 ARC 的能力边界

SRS 在转发时重写信封发件人,可能让新身份通过 SPF,但不会自动恢复原始 DMARC 对齐。ARC 使用可验证链传递上游身份验证结果。最终收件方决定是否信任中间服务,以及是否据此采取策略例外。两者都不能替代正确的 DKIM。

Google 的间接邮件说明区分转发与直接发送,并建议转发服务添加 ARC 标头。这不代表普遍免除DMARC 对齐。在 2025 和 2026 年,仍应分别核查当时的服务商规则与实际结果。

大量邮箱需要转发时,平台设计值得关注。按当前文档,TrekMail 提供邮箱转发和 DNS 配置说明。Bring Your Own SMTP文档有助于核查外部发送路径及其对齐要求。

多域名运维的传统方式与结构化方式

传统处理DMARC 失败的方式有时是不断添加工具,最后无人清楚哪个系统负责签名。结构化方式则明确区分邮箱托管、投递和 DNS 状态,使故障更容易调查。

传统方式结构化方式
按用户计费有时促使团队大量使用别名和转发多域名固定费率方案在适合的使用量下可能降低独立邮箱成本
所有曾接入的服务都堆在同一条 SPF 中核查来源,减少无用 include,按需使用子域名
ESP 使用未对齐的供应商域名签名为每条合法发送流检查对齐验证
直到用户投诉才发现问题DNS 检查可能提前发现部分配置错误
邮箱迁移依赖导出和不清晰的流程IMAP 可复制邮箱数据,DNS 和发送验证另行切换

按当前套餐条件,TrekMail 可集中托管多个域名的邮箱,提供共享存储,并允许使用托管 SMTP 或自选服务商。是否经济适用取决于实际使用情况。可比较多域名邮件托管和迁移相关的imapsync

收到 DMARC 失败工单后该做什么

出现DMARC 失败时,不要条件反射地把 reject 改回 none。先确认问题来自转发、无效 DKIM 还是未对齐。策略调整应配合发送源清单、测试、监测和明确的回滚计划。

  1. 获取收件人的完整标头。
  2. 确认 SPF 失败的连接 IP 是否属于已知转发服务。
  3. 检查 DKIM 结果和签名 d= 域名。
  4. 检查签名域名与可见 From 的对齐。
  5. 经过可信中间服务时查找 arc=pass,并评估它对该收件方的实际意义。
  6. 核查 SPF 查询数量、过期 include 和语法。

使用 TrekMail 时,可以从添加域名检查记录;若邮件没有到达却看不到退信,可参考我收不到邮件

结论:DMARC 失败可以系统排查

反复DMARC 失败不代表邮件系统无法修复。可能原因包括过度依赖 SPF、DKIM 未对齐或容易受修改影响,以及转发链修改邮件。也应考虑未经授权的来源。

措施通常并不复杂:使用对齐域名签名、保持 DKIM 有效、维护 SPF,并测试转发。应检查真实发送流和可用报告,同时考虑报告覆盖不全。

TrekMail 根据当前套餐提供多域名邮箱、共享存储、IMAP 迁移、catch-all 和灵活发送选项。按本文所列条件,付费套餐在按年计费时从每月 $3.50 起,可能提供 14 天免费试用;Nano 可能免费且无需银行卡。IMAP 复制的是邮箱数据,不是 DNS 或信誉。请查看价格TrekMail确认最新条件。

简而言之:如果环境中存在转发,DMARC 失败就是重要测试场景。通过测试有助于提升配置的稳健性,但不保证所有路径都通过 DMARC,也不保证所有收件方都会投递。

分享这篇文章

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

登录 TrekMail

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

12 个字符 两次密码一致

重置邮件已发送

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

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