跳至主要内容

SPF 记录

SPF(Sender Policy Framework)记录是一条 DNS TXT 记录,列出哪些邮件服务器有权代表该域名发送邮件,让接收方邮件服务器得以识破并拒收来自未授权来源的邮件,从而减少邮件伪造与钓鱼攻击。

定义

SPF 记录(Sender Policy Framework 记录)是发布在域名公共 DNS 区中的一条 DNS TXT 资源记录,列出有权代表该域名发送邮件的 IP 地址、IPv6 前缀及邮件服务器主机名。当接收方邮件服务器接到入站邮件时,会查询发件方域名的 SPF 记录并将连接 IP 与策略比对。如果该 IP 未列入授权清单,接收方可以根据域名所有者所设的策略限定符将邮件标为软失败、直接拒收,或转入更严的评估。

SPF 最早在 IETF 的 RFC 4408(2006)中规范化,随后由互联网工程任务组(IETF)于 2014 年 4 月发布的 RFC 7208 升级为现行权威规范。它与 DKIM(DomainKeys Identified Mail)、DMARC(Domain-based Message Authentication, Reporting, and Conformance)一道,是三项相辅相成的邮件认证标准之一。

工作原理

SPF 评估流程在 SMTP 握手的 MAIL FROM 阶段由接收方邮件服务器的 SMTP 引擎执行若干顺序步骤。

域名所有者首先在 DNS 中发布 SPF TXT 记录。一条典型记录形如:v=spf1 include:_spf.google.com ip4:203.0.113.5 ~all。其组成包括:v=spf1(版本标识)、一个或多个机制(includeip4ip6amxexists),以及末尾的限定符(+all-all~all?all)。-all 表示硬失败——任何未在记录中明确列出的服务器都未获授权。~all(软失败)让邮件通过但记录策略不一致,常用于迁移过渡期。

邮件抵达时,接收方 MTA(Mail Transfer Agent)会从信封发件人(MAIL FROM 地址,又称 RFC5321.MailFrom 地址)中提取域名,并对 _spf.<域名> 或域名根做 DNS TXT 查询。SPF 库依次评估每个机制,直到匹配或达到 RFC 7208 第 4.6.4 节所定义的 10 次 DNS 查询上限(“SPF PermError” 阈值)。结果可能为 Pass、Fail、SoftFail、Neutral、TempError 或 PermError,会被插入邮件的 Received-SPF 头部,并交给反垃圾过滤器及 DMARC 策略引擎使用。

务必注意:SPF 认证的是信封发件人(MAIL FROM),而非邮件正文中可见的 From 头部。这意味着 SPF 单独无法阻止邮件客户端中”显示名”被假冒——这正是为什么 DMARC 对齐(要求 SPF 与/或 DKIM 结果与 RFC5322.From 域名相符)才是完整防护的必要环节。

您会在哪里遇到它

任何在意邮件投递率与发件人信誉的场景都会遇到 SPF 记录。Amazon SES、SendGrid、Mailgun、Postmark、SparkPost 等服务运营的事务邮件基础设施,要求域名所有者先在 SPF 中加入指向服务商发送基础设施的 include 机制,邮件才能通过认证检查。

派发邮箱确认投票的竞赛平台——包括 Woobox、ShortStack 以及基于 Mailchimp Transactional(Mandrill)自建的系统——都依赖发送域名拥有有效 SPF 记录。Google(Gmail)、Microsoft(Outlook / Exchange Online Protection)、Yahoo Mail 等邮箱服务商把 SPF 作为投递率算法的输入。SPF 缺失或配置错误,会显著拉高确认邮件被静默投入垃圾箱或直接拒收的概率,最终导致投票无法被确认。

Cloudflare、AWS Route 53、GoDaddy、Namecheap 等服务商的 DNS 控制台都通过界面提供 SPF TXT 记录的编辑功能。MXToolbox SPF Lookup、Google Admin Toolbox、DMARCIAN 的 SPF Surveyor 等诊断工具能让域名所有者检查并校验已发布的记录。

实际示例

某竞赛平台从 [email protected] 发出投票确认邮件。域名 votes.example.com 的 SPF 记录为 v=spf1 include:sendgrid.net -all。当 Gmail 收到确认邮件时,其入站 SMTP 服务器查询 votes.example.com 的 SPF 记录、展开 sendgrid.net 的 include 机制,将连接 IP 与 SendGrid 已授权服务器列表比对。若 IP 匹配,SPF 结果为 Pass,邮件得以进入收件箱。如果该域名没有 SPF 记录,Gmail 过滤器会把邮件视为未通过认证,进入收件箱的概率随之大幅下降。

某地区报纸竞赛把事务邮件服务商从 Mailchimp 切换到 Amazon SES 但忘了更新 SPF 记录。确认邮件开始在 Microsoft Outlook 上 SPF 失败并被批量归入垃圾箱,导致投票者错过确认窗口。竞赛管理员借助 MXToolbox 诊断出问题,在 SPF 记录中加入 include:amazonses.com,投递率在 DNS 传播窗口(通常 0 至 48 小时,取决于 TTL)内得以恢复。

相关概念

SPF 是邮件认证三标准栈的支柱之一:参见 DKIM 了解加密签名验证,参见 DMARC 了解基于 SPF 与 DKIM 结果作出处置的策略层。在竞赛运营中的实际影响见 邮箱确认投票——确认邮件能否送达是头等运营依赖。基于 DMARC 之上较新的 BIMI(Brand Indicators for Message Identification)标准允许已认证的发件方在支持的邮箱服务商中显示品牌徽标——一种正在兴起的信任信号,本词条暂不展开。

博客精选 — 指南与案例

实用指南、技术深潜、匿名化案例研究。60+ 篇文章。内容定期更新。

Victor Williams — founder of Buyvotescontest.com
Victor Williams
在线 · 通常5分钟内回复

你好 👋 — 把比赛URL发给我,一小时内报价。暂不用银行卡。