SPF・DKIM・DMARC在何处生效?——通过一封邮件的流转过程来叠加理解这三者

Microsoft 365・Azureカテゴリを表すパンダのイラスト Microsoft 365・Azure

关于本文
本文是通过利用生成式AI的自动化生成流程创建的。在梳理过程中参考了SPF的RFC 7208、DKIM的RFC 6376、2026年发布的DMARC的RFC 9989,以及Microsoft 365的最新电子邮件认证资料。

验证状态:📘 已确认现行RFC及Microsoft 365官方信息・已实现PowerShell DNS确认示例・未实施执行确认

SPF・DKIM・DMARC在何处生效?——通过一封邮件的流转过程来叠加理解这三者

SPF、DKIM和DMARC并不是在进行三次相同的认证。SPF主要将发送端IP与MAIL FROM侧的域名进行关联,DKIM将签名域名与邮件内容进行关联,而DMARC则将用户可见的From域名与SPF/DKIM的认证结果的alignment(对齐)联系起来

在2026年查询DMARC时,应以RFC 9989为基准,而不是旧的RFC 7489。RFC 9989废弃(obsolete)了RFC 7489和RFC 9091。

叠加在一封邮件中

sequenceDiagram
    participant S as Sending server
    participant D as DNS
    participant R as Receiving server
    participant U as User

    S->>R: SMTP message
    R->>D: SPF: MAIL FROM側ドメインの許可情報を確認
    D-->>R: SPF policy
    R->>D: DKIM: d=署名ドメインの公開鍵を確認
    D-->>R: DKIM public key
    R->>R: SPF/DKIMの認証結果を評価
    R->>D: DMARC policyを確認
    D-->>R: DMARC policy
    R->>R: Fromドメインとのalignmentを評価
    R-->>U: 最終的な配送・処理

SPF不会对“From字段本身”进行认证

SPF通过DNS的SPF记录,来确认接收到的SMTP连接源是否有权发送目标域名的邮件。在RFC 7208中,作为检查对象的identity(身份标识)处理MAIL FROM或HELO。

这里重要的一点是,这与邮件客户端中显示的 From: 标头处于不同的层级。Microsoft 365的官方说明也解释了,单靠SPF并不会确认MAIL FROM域名与From域名的alignment。

DKIM对邮件内容进行签名

在DKIM中,发送方对邮件内容附加密码学签名,接收方通过DNS获取公钥进行验证。签名中通过 d= 表明签名域名。

通过这种方式,可以确认作为签名对象的标头和正文在签名后是否被非法篡改。但是,仅仅通过DKIM,并不能保证该 d= 域名与用户可见的From域名相同。

DMARC检查与From域名的alignment

在DMARC中,以RFC 5322的 From: 域名为中心,评估其与通过SPF或DKIM认证的域名的alignment。

大致梳理出来的关系如下。

机制主要查看对象与DMARC的关系
SPFSMTP发送源与SPF identity已认证的SPF域名是否与From域名alignment
DKIM签名与 d= 域名已认证的DKIM签名域名是否与From域名alignment
DMARCFrom域名、SPF/DKIM结果、policy包含alignment在内判断DMARC pass/fail

DMARC还具有域名所有者发布的policy(策略)和reporting(报告)机制。

立即尝试:读取自己域名的DNS

不仅可以通过阅读原理来了解,还可以通过PowerShell确认公共DNS中记录了什么。以下仅为引用查看,不会更改DNS设置。

作为SPF候选的域名直下的TXT:

Resolve-DnsName -Name example.com -Type TXT

DMARC:

Resolve-DnsName -Name _dmarc.example.com -Type TXT

DKIM需要selector(选择器)。例如在使用的环境中如果是 selector1 ,考虑到像Microsoft 365那样通过CNAME委派的情况,可以先确认CNAME。

Resolve-DnsName -Name selector1._domainkey.example.com -Type CNAME
Resolve-DnsName -Name selector1._domainkey.example.com -Type TXT

请将 example.comselector1 替换为您自己的环境。selector名称因服务和设置而异。

这里查看的是公共DNS记录。仅凭此结果,无法判断实际的一封邮件是否通过(pass)了SPF/DKIM/DMARC。在真实邮件中,需要将 Authentication-Results 等标头、MAIL FROM、DKIM的 d= 以及显示From的alignment结合起来进行确认。

整合了多个查询的PowerShell版本也已存放在GitHub上。

2026年阅读旧文章时的注意事项

关于DMARC的解说文章多年来一直引用RFC 7489。然而,当前的RFC Editor已将RFC 9989作为Proposed Standard(草案标准)发布,并废弃了RFC 7489和RFC 9091。

因此,不能将“RFC 7489是这么写的所以现在这也是正本”作为依据,必须确认现行的RFC。这也是在使用AI重写旧技术文章时容易漏掉的要点。

在Microsoft 365中不要将这三者分开结束

Microsoft 365的官方资料也将SPF、DKIM和DMARC解释为相互关联的组成要素。在实际运营中,由于涉及本公司的发送源、来自SaaS的代理发送、转发以及子域名等,因此不要直接复制示例DNS记录,而是应当先盘点自家的邮件路径。 聚焦于机制的位置关系,不统一推荐具体的 p=reject 等运营值。

GitHub示例

官方信息・一手信息

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
标题和URL已复制