SPF (Sender Policy Framework) 和 DKIM (DomainKeys Identified Mail) 是用于验证邮件发送域名合法性的认证技术。两者都通过 DNS 记录进行配置,有助于防止邮件伪造 (Spoofing)。
SPF 的机制是在 DNS 的 TXT 记录中声明「只有这些 IP 地址的服务器才能以本域名发送邮件」。接收服务器会检查邮件的发送方 IP 地址是否包含在 SPF 记录中,但结果并非合格与不合格两种,RFC 7208 定义了 pass、fail、softfail、neutral、none、temperror、permerror 共 7 种结果。fail 表示域名持有者明确声明该主机无权使用本域名,至于是否拒收这封邮件则交由接收方的策略决定。反过来 pass 也只说明该主机有权使用本域名,并不能证明邮件内容是安全的。
DKIM 的机制是为邮件添加电子签名。发送服务器分别对正文和选定签名的邮件头字段计算哈希值,并用私钥签名。公钥以「选择器._domainkey.域名」形式的 TXT 记录发布在 DNS 中,接收服务器取回后验证签名。验证通过所能说明的是签名覆盖的范围在签名之后没有被改动,以及签名域名对这封邮件承担了一定责任。RFC 6376 明确指出,除此之外它不对邮件作任何断言。
在包含短链接的邮件营销中,SPF 和 DKIM 的配置尤为重要。短链接会隐藏目标域名,收件人无法只凭链接文字判断邮件是否可信,把发送域名的认证配置妥当,是发送方为此作出的弥补。同时也要说清界限:SPF 和 DKIM 验证的是发送域名,而不是正文里短链接的目标地址。通过认证的邮件同样可能带有危险链接,收件人仍然需要养成事先确认链接去向的习惯。关于送达率,Google 说明自 2024 年 2 月 1 日起,向 Gmail 账号发信的所有发送者都必须配置 SPF 或 DKIM 之一,不满足要求的邮件可能无法按预期送达,或者被判定为垃圾邮件。
在 SPF 和 DKIM 的基础上,还可以配置 DMARC (Domain-based Message Authentication, Reporting and Conformance),向接收方提出认证失败邮件的处理请求。策略取值有 none (不要求特别处理)、quarantine (视为可疑) 和 reject (拒收) 三种,三者都属于请求,RFC 7489 指出最终处置始终取决于接收方的本地策略。DMARC 最容易卡住的一步是标识符对齐 (alignment)。即使 SPF 或 DKIM 通过,只要通过认证的域名与收件人看到的 From 头域名不一致,DMARC 依然不会通过。用发送服务的默认域名发信时,就会出现 SPF 和 DKIM 都成功而只有 DMARC 失败的状况。对于每天向个人 Gmail 账号发送超过 5,000 封邮件的发送者,Google 要求同时配置 SPF 和 DKIM,并配置 DMARC 记录 (策略可以设为 none)。