关于本文
本文是通过利用生成式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的关系 |
|---|---|---|
| SPF | SMTP发送源与SPF identity | 已认证的SPF域名是否与From域名alignment |
| DKIM | 签名与 d= 域名 | 已认证的DKIM签名域名是否与From域名alignment |
| DMARC | From域名、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.com 和 selector1 替换为您自己的环境。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 等运营值。

