首页 › 指南

SPF、DKIM 和 DMARC 设置:记录写法、常见陷阱与验证

发布于 2026-11-03 / 更新于 2026-11-03 / 作者 Yuki Nakazawa

如果您使用自己的域名发送邮件,SPF、DKIM 和 DMARC 设置已不再是可有可无的选项。请按以下顺序进行:发布一条 SPF 记录,使用 2048 位密钥启用 DKIM 签名,然后发布一条从 p=none 开始并启用报告的 DMARC 记录。与此同时,请确保发送邮件的 IP 地址具有相匹配的反向 DNS(PTR)。

无论您是通过共享主机、自己的 VPS、Google Workspace、Microsoft 365 还是批量邮件服务发信,本指南都适用。文中提供了可供修改套用的记录、最常导致身份验证失败的错误,以及如何通过真实的邮件头确认一切正常。

下文中的事实已对照 RFC 以及 Google、Yahoo 和 Microsoft 的官方页面进行核实,截至 2026 年 11 月。邮箱服务商的要求会发生变化,请以其官方页面为准。

免费检查您的域名或 IP 地址是否被列入约 345 个黑名单中的任何一个。

SPF、DKIM 和 DMARC 各自证明什么,以及设置顺序

SPF(Sender Policy Framework,发件人策略框架)让域名可以在 DNS 中列出允许为其发送邮件的服务器。接收服务器会查看信封发件人(SMTP MAIL FROM 地址,之后会显示为 Return-Path),获取该域名的 SPF 记录,并检查建立连接的 IP 地址是否在列表中。仅凭 SPF 本身,无法对读者看到的 From 地址作出任何证明。

DKIM(DomainKeys Identified Mail,域名密钥识别邮件)会为每封邮件添加加密签名。发件系统使用私钥签名,接收方使用发布在 DNS 中的公钥验证签名。有效的签名可以证明签名域(d= 值)对该邮件负责,并且已签名的邮件头和正文在传输过程中没有被篡改。

DMARC(Domain-based Message Authentication, Reporting and Conformance,基于域的消息认证、报告和一致性)将这两者与可见的 From 域名关联起来。只有当 SPF 或 DKIM 通过,并且通过验证的域名与 From 域名对齐时,邮件才能通过 DMARC。DMARC 记录还会告诉接收方您希望如何处理验证失败的邮件(不处理、隔离或拒收),以及将汇总报告发送到哪里,借助这些报告,您可以发现自己遗忘的发信来源。

机制记录所在位置检查内容
SPFexample.com 上的 TXT发件 IP 与 MAIL FROM 域名是否相符
DKIMselector._domainkey.example.com 上的 TXT(或 CNAME)签名及 d= 域名
DMARC_dmarc.example.com 上的 TXT与 From 域名的对齐,以及策略和报告

设置顺序

  1. 列出所有以您的域名发送邮件的系统:您自己的服务器、Google Workspace 或 Microsoft 365、新闻通讯和事务邮件服务、网页表单、开票和客服工单工具。
  2. 发布一条覆盖所有这些系统的 SPF 记录。
  3. 在每个发信系统上启用 DKIM,并发布其公钥。
  4. 发布带有 p=none 和 rua 报告地址的 DMARC 记录。Google 建议在设置好 SPF 和 DKIM 后等待 48 小时,再添加 DMARC。
  5. 阅读报告,修复所有验证失败的来源,然后改为 p=quarantine,最终改为 p=reject。

SPF 设置:一条记录,十次查询

SPF 是设置在域名本身上的 TXT 记录。下面是一个通过自己的服务器以 IPv4 和 IPv6 发信、同时还使用 Google Workspace 的域名示例:

example.com.  3600  IN  TXT  "v=spf1 ip4:203.0.113.10 ip6:2001:db8::10 include:_spf.google.com ~all"

在大多数 DNS 控制面板中,主机记录一栏留空(或填写 @),类型选择 TXT,然后粘贴从 v=spf1 开始的值。常用的组成部分如下:

发信来源需要添加的内容
您自己的 VPS 或邮件服务器ip4:203.0.113.10 和/或 ip6:2001:db8::10
Google Workspaceinclude:_spf.google.com
Microsoft 365include:spf.protection.outlook.com
共享主机或邮件服务服务商文档中给出的 include: 或 IP 范围

SPF 的常见陷阱

对于从不发送邮件的域名,请发布 v=spf1 -all,使其更难被伪冒。

DKIM 设置:2048 位密钥与选择器

DKIM 由两部分组成:发件系统使用私钥签名,DNS 发布与之匹配的公钥。使用 Google Workspace、Microsoft 365、大多数主机控制面板和大多数邮件服务时,您需要在管理控制台中生成密钥,并复制其显示的 DNS 值。

密钥长度与选择器

请使用 2048 位 RSA 密钥。RFC 8301 将 1024 位定为最低要求,并规定签名方应使用至少 2048 位的密钥;它还禁止使用 rsa-sha1。Google 的指导与此一致:如果您的 DNS 托管商支持,请选择 2048 位,只有在不支持时才退而使用 1024 位。

选择器(selector)是用来标识由哪个密钥签署邮件的标签,因此一个域名可以同时拥有多个密钥,例如每个发信服务一个,或每个轮换周期一个。公钥位于 selector._domainkey.yourdomain。Google Workspace 的默认选择器是 google。Microsoft 365 使用两条 CNAME 记录 selector1._domainkey 和 selector2._domainkey,指向由 Microsoft 托管的密钥;由于格式因租户而异,请从 Defender 门户或 Get-DkimSigningConfig 获取准确的目标值。

发布较长的公钥

2048 位公钥的长度超过了单个 DNS 字符串允许的 255 个字符,因此在区域文件中,它会写成同一条 TXT 记录中的多个带引号的字符串:

selector1._domainkey.example.com.  3600  IN  TXT  ( "v=DKIM1; k=rsa; "
    "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA(first part of your key)"
    "(rest of your key)IDAQAB" )

请将括号中的部分替换为您的实际密钥。接收方会将这些字符串直接拼接,中间不加空格,因此可以在密钥中的任意位置拆分。许多控制面板会自动拆分较长的值:请先粘贴完整的值,只有在面板拒绝时才自行拆分。请确保复制时没有遗漏任何内容;p= 为空表示该密钥已被吊销。

在运行 Postfix 或类似 MTA 的自有 VPS 上,可以使用 OpenDKIM 等签名 milter 生成密钥对,例如 opendkim-genkey -b 2048 -s selector1 -d example.com。然后按上文所示发布生成的公钥文件内容。

确认邮件确实已签名

打开一封您发出的邮件,查找 DKIM-Signature: 头。其中的 d= 标签应为您的域名,s= 应为您发布的选择器。许多邮件服务默认使用自己的域名签名;这样虽然能通过 DKIM,但与您的 From 域名并不对齐,因此对 DMARC 没有帮助。请启用该服务的自定义域名身份验证,使 d= 变为您的域名。

DMARC 设置:从 p=none 开始,再逐步强制执行

DMARC 是位于您域名下 _dmarc 的 TXT 记录。请先从监控模式开始,即要求接收方不改变对您邮件的处理方式,同时申请接收汇总报告:

_dmarc.example.com.  3600  IN  TXT  "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"

汇总报告是机器可读的摘要,说明哪些 IP 地址以您的域名发送了邮件,以及这些邮件是否通过了验证;Google 建议使用专用邮箱或群组来接收这些报告。当报告显示所有合法来源都能在对齐的情况下通过验证后,请编辑同一条记录来收紧策略,而不是再添加第二条:

_dmarc.example.com.  3600  IN  TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"
_dmarc.example.com.  3600  IN  TXT  "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com"
标签含义
v=DMARC1必需,且必须放在最前面
p=none(不处理)、quarantine(视为可疑,例如放入垃圾邮件文件夹)或 reject
sp=子域名的策略;如未设置,子域名沿用 p=
rua=汇总报告的发送地址;不设置则收不到报告
adkim= / aspf=DKIM 和 SPF 的对齐模式:r 宽松(默认)或 s 严格

通俗解释“对齐”

要通过 DMARC,SPF 或 DKIM 中至少有一项必须针对与 From 域名相符的域名通过验证。在宽松模式下,只需组织域名一致即可,因此 d=example.com 的 DKIM 签名与来自 alerts@news.example.com 的邮件是对齐的。严格模式则要求完全一致。邮件服务通常在 Return-Path 中使用自己的域名,因此即使 SPF 通过也不会对齐;对齐的 DKIM 才是让这类邮件通过 DMARC 的实际办法。

如果您希望对子域名采用不同的策略,请添加 sp=。例如,p=reject; sp=quarantine 会拒收来自主域名的验证失败邮件,而对来自子域名的验证失败邮件仅作隔离处理。

关于更新后的标准

2026 年 5 月,DMARC 以 RFC 9989 的形式重新发布,取代了 RFC 7489。现有记录仍然有效,并且仍以 v=DMARC1 开头。新标准删除了 pct 标签(除了 0 或 100 之外,该标签很少被准确执行),并新增了 t=y(测试模式)和 np(针对不存在的子域名的策略)等标签。部分服务商的帮助页面仍在介绍 pct,因此逐步调整 p= 的值,是推进强制执行时最不容易产生歧义的方式。

为发件 IP 设置反向 DNS(PTR)

反向 DNS 将 IP 地址反向映射回主机名。Google 要求所有向个人 Gmail 账号发信的发件人都必须具有 PTR 记录,且其主机名能够解析回同一个发件 IP;Yahoo 要求发件 IP 具有有效的正向和反向 DNS,并建议使用有意义的、非通用的 PTR 记录。

203.0.113.10       PTR  mail.example.com.
mail.example.com.  A    203.0.113.10

PTR 记录并不在您域名的区域中。它由 IP 地址的所有者控制,因此在 VPS 上,您需要在服务商的控制面板中设置(通常称为反向 DNS 或 rDNS),然后在自己的 DNS 中创建与之匹配的 A 记录(IPv6 则为 AAAA 记录)。如果您通过 IPv6 发信,该 IPv6 地址也需要同样处理。使用 Google Workspace、Microsoft 365、邮件服务和大多数共享主机时,服务商会为您管理发件 IP 及其反向 DNS。

如何验证您的设置

查看 Authentication-Results

向外部邮箱发送一封测试邮件,并查看完整的邮件头。在 Gmail 中,打开邮件后选择“显示原始邮件”。Google 的 DKIM 帮助页面指出,测试邮件应发给其他用户,而不是发给自己。请查找类似下面的邮件头:

Authentication-Results: mx.example.net;
       dkim=pass header.i=@example.com header.s=selector1;
       spf=pass smtp.mailfrom=example.com;
       dmarc=pass header.from=example.com

具体格式因接收方而异。关键在于 spf=pass、dkim=pass 和 dmarc=pass,并且 header.i 或 header.d 以及 header.from 中是您自己的域名。如果 SPF 针对某个服务的域名通过,而 DKIM 显示的是另一个域名,DMARC 就会失败:请先修正 DKIM 的对齐。

直接查询 DNS

dig +short TXT example.com
dig +short TXT selector1._domainkey.example.com
dig +short TXT _dmarc.example.com
dig +short -x 203.0.113.10

在 Windows 上,nslookup -type=TXT _dmarc.example.com 可以完成同样的查询。DNS 更改需要一定时间才能生效;Google 表示,SPF 和 DKIM 各自最多可能需要 48 小时才会开始起作用。免费的在线检测工具也可以帮您解析记录并统计 SPF 查询次数。

如果身份验证已通过,但邮件仍被退回或进入垃圾邮件,请使用我们的黑名单检测工具检查您的发件 IP 或域名是否被列入 DNSBL,并参阅因黑名单导致邮件无法送达了解后续步骤。

Gmail、Yahoo 和 Outlook.com 的发件人要求

各大邮箱服务商现在都会强制执行身份验证。截至 2026 年 11 月,其官方页面的说明如下。

完整内容请阅读 Google 电子邮件发件人指南、Yahoo 发件人最佳实践和 Microsoft 关于 Outlook.com 的公告。即使您的发送量远低于这些标准,现在就把三者都设置好,将来门槛降低时也不会措手不及。关于 Gmail 特有的问题排查,请参阅Gmail 无法投递您的邮件。

常见错误

如果您不想自行处理

我们可为您介绍承接解除申请、咨询和建议的服务商(JPY 50,000 起)。是否解除由各黑名单运营方决定,无法作出承诺。

寻求帮助

本站可能会从所列服务商处获得介绍费。 About

常见问题

三者都需要吗,还是设置一个就够了?

对于发送量较小的发件人,Gmail 和 Yahoo 接受 SPF 或 DKIM 其中之一,但批量发件人三者都需要。只有 DMARC 能保护人们实际看到的 From 地址,因此即使您发信不多,也请把三者都设置好。

SPF 中应该使用 ~all 还是 -all?

Google 建议使用 ~all;Microsoft 建议同时使用 DKIM 和 DMARC 的域名使用 -all。请先使用 ~all,直到 DMARC 报告确认您已找出所有发件来源,再决定是否切换。

DMARC 一直保持 p=none 可以吗?

这样可以满足 Gmail、Yahoo 和 Outlook.com 对批量发件人的要求,但它要求接收方不采取任何措施,因此无法阻止伪冒。请将 p=none 视为监控阶段,在报告显示没有问题后,先改为 quarantine,再改为 reject。

我的 DNS 托管商不接受 2048 位的 DKIM 密钥,怎么办?

请将密钥拆分为同一条 TXT 记录中的多个带引号的字符串;接收方会将它们直接拼接,中间不加空格。请查看 DNS 托管商的帮助文档,了解其 TXT 记录的长度限制。只有在托管商完全无法存储 2048 位密钥时,才使用 1024 位密钥。

全部验证都通过了,邮件却仍然进入垃圾箱,为什么?

身份验证只是入场券,并不能保证邮件进入收件箱。发件人信誉、投诉率和黑名单上榜情况仍然很重要。如果您被 Spamhaus 列入,请参阅如何移出 Spamhaus 黑名单。

参考的官方页面

本文中的事实已在发布时对照以下官方页面进行核实。相关政策和行为可能随时变更,恕不另行通知,在依赖重要信息之前,请先查看官方页面。

相关指南

Gmail 拒收邮件或邮件进入垃圾箱?原因与解决方法

Gmail 为何拒收邮件或将其归入垃圾邮件,550 5.7.26 等退信代码是什么意思,以及自己的 Gmail 收不到邮件时该如何排查。

邮件被列入黑名单?如何读懂退信并移出黑名单

邮件被黑名单拦截?读懂退信代码,按正确顺序排查原因,判断哪些黑名单真正有影响,并以正确的方式申请移除。

Spamhaus 解封指南:如何将 IP 或域名移出黑名单

被 Spamhaus 列入黑名单?了解您在哪个列表上(ZEN、PBL、XBL、CSS、SBL、DBL)、返回码的含义,以及每个列表对应的正确移除途径。

全部指南 →