SPF、DKIM 与 DMARC:邮件身份认证完整指南
通过这份 SPF、DKIM、DMARC 完整指南掌握邮件身份认证。了解各协议的作用,学习如何配置 DNS 记录、排查常见问题、提升邮件送达率。
邮件身份认证是确保邮件可靠送达的基础。如果没有正确配置 SPF、DKIM 和 DMARC,你精心撰写的邮件可能永远无法到达客户的收件箱,而是被归入垃圾邮件文件夹,甚至直接被拒绝。
这份完整指南将介绍每种邮件身份认证协议的作用,提供 DNS 配置的分步说明,涵盖常见问题的排查方法,并教你如何验证配置是否正确生效。
为什么邮件身份认证至关重要
电子邮件诞生于一个安全性并非首要考量的年代。最初的 SMTP 协议没有内置验证机制来确认邮件确实来自其声称的发件人。这个根本性的漏洞导致了邮件伪造、网络钓鱼攻击和垃圾邮件的泛滥。
邮件身份认证协议通过允许域名所有者指定以下内容来解决这一问题:
- 哪些服务器可以代表其发送邮件(SPF)
- 证明邮件真实且未被篡改的加密证明(DKIM)
- 对认证失败的邮件采取什么处理措施(DMARC)
认证不当对业务的影响
缺少正确的邮件身份认证:
- 送达率降低:Gmail、Microsoft、Yahoo 等主要邮件服务商会更严格地过滤未经认证的邮件
- 垃圾邮件率上升:你的正常邮件要与使用你域名的伪造邮件竞争
- 品牌受损:冒充你品牌的网络钓鱼攻击会损害客户信任
- 收入损失:营销活动无法触达已订阅的用户
- 合规风险:许多法规现已要求进行正确的邮件身份认证
认证三重奏
SPF、DKIM 和 DMARC 协同构成完整的认证体系:
| 协议 | 作用 | 类比 |
|---|---|---|
| SPF | 列出授权发送服务器 | 标有已授权办公室的公司信头 |
| DKIM | 对邮件进行加密签名 | 证明真实性的蜡封 |
| DMARC | 设置失败处理策略并生成报告 | 对可疑信件的处理说明 |
每个协议应对不同的攻击向量。SPF 防止未授权的服务器冒充你发件。DKIM 防止发送后邮件内容被篡改。DMARC 将二者联系起来,并提供认证结果的可见性。
深入理解 SPF(发件人策略框架)
SPF(Sender Policy Framework,发件人策略框架)是一种基于 DNS 的邮件认证方法,用于指定哪些邮件服务器有权代表你的域名发送邮件。
SPF 的工作原理
当邮件到达接收服务器时,该服务器会查找发件人域名的 SPF 记录,然后检查发送邮件的 IP 地址是否在授权列表中。如果匹配,SPF 通过;否则,SPF 失败。
SPF 验证流程:
- 你从营销平台发送邮件
- 接收服务器从退信路径(信封发件人)中提取你的域名
- 服务器查询你域名的 DNS SPF 记录
- 将发送 IP 与 SPF 记录的授权列表进行比对
- 服务器记录通过、失败、软失败或中性结果
SPF 记录语法
SPF 记录以 TXT 记录形式发布在域名 DNS 中。基本结构如下:
v=spf1 [mechanisms] [qualifier]all版本标签: 始终以 v=spf1 开头
机制: 定义谁可以发送
| 机制 | 说明 | 示例 |
|---|---|---|
| include: | 信任另一域名的 SPF | include:spf.brevo.com |
| ip4: | 授权特定 IPv4 地址 | ip4:192.168.1.1 |
| ip6: | 授权特定 IPv6 地址 | ip6:2001:db8::1 |
| a | 允许域名 A 记录的 IP | a |
| mx | 允许域名邮件服务器的 IP | mx |
| ptr | 反向 DNS(已废弃) | ptr:example.com |
| exists: | 条件检查 | exists:%{i}.spf.example.com |
限定符: 定义匹配时的处理方式
| 限定符 | 含义 | 结果 |
|---|---|---|
| + | 通过(默认) | 已授权 |
| - | 硬失败 | 未授权,拒绝 |
| ~ | 软失败 | 未授权,接受但标记 |
| ? | 中性 | 无策略 |
all 机制: 应用于所有未匹配前面机制的情况
SPF 记录示例
使用单一邮件服务商的基本配置:
v=spf1 include:spf.brevo.com -all这条记录授权 Brevo 代表你的域名发送邮件,并拒绝其他所有发件人。
多个邮件服务:
v=spf1 include:spf.brevo.com include:_spf.google.com include:spf.protection.outlook.com -all这条记录授权 Brevo、Google Workspace 和 Microsoft 365。
包含自有邮件服务器:
v=spf1 ip4:203.0.113.10 include:spf.brevo.com -all这条记录授权指定 IP 地址(你的服务器)以及 Brevo。
测试阶段使用软失败:
v=spf1 include:spf.brevo.com ~all使用 ~all 代替 -all 会标记失败但不拒绝。适合初始配置阶段使用。
配置 SPF 记录的步骤
第一步:确认所有发件来源
列出所有从你域名发送邮件的服务:
- 邮件营销平台(Brevo、Mailchimp 等)
- 事务性邮件服务
- CRM 系统
- 工单软件
- 企业邮箱(Google Workspace、Microsoft 365)
- 自有邮件服务器
第二步:收集 SPF include 声明
每个邮件服务商都会在文档中提供所需的 SPF include。常见示例:
| 服务商 | SPF Include |
|---|---|
| Brevo | include:spf.brevo.com |
| Google Workspace | include:_spf.google.com |
| Microsoft 365 | include:spf.protection.outlook.com |
| Amazon SES | include:amazonses.com |
| SendGrid | include:sendgrid.net |
| Mailgun | include:mailgun.org |
第三步:创建 SPF 记录
将所有 include 合并为一条记录:
v=spf1 include:spf.brevo.com include:_spf.google.com -all第四步:添加 DNS 记录
在 DNS 管理界面中:
- 类型:TXT
- 主机/名称:@(或域名根部留空)
- 值:完整的 SPF 记录
- TTL:3600(或默认值)
第五步:验证记录
使用 DNS 查询工具确认:
dig TXT yourdomain.com也可使用 MXToolbox SPF Lookup 等在线工具。
SPF 限制与最佳实践
10 次 DNS 查询限制:
SPF 最多允许 10 次 DNS 查询。每个 include: 计为一次查询,而被包含的记录中可能还有自己的 include,也计入总数。超过限制会导致 SPF permerror(永久性错误),所有检查均失败。
保持在限制以内的策略:
- 尽量直接使用 IP 地址(ip4: 不计入查询次数)
- 合并使用同一服务商的服务
- 使用 SPF 扁平化服务将 include 转换为 IP 地址
- 删除已停用服务的旧 include
其他 SPF 最佳实践:
- 每个域名只能有一条 SPF 记录(多条记录会导致失败)
- 配置时先使用
~all(软失败),确认无误后改为-all - 更换邮件服务商后及时更新 SPF
- 不要使用已废弃的
ptr机制 - 记录尽量保持简洁
SPF 常见错误
多条 SPF 记录:
错误:v=spf1 include:spf.brevo.com -allv=spf1 include:_spf.google.com -all
正确:v=spf1 include:spf.brevo.com include:_spf.google.com -all超过 DNS 查询限制:
如果有很多 include,需检查查询总数。使用 SPF 分析工具确认不超过 10 次。
更换服务商后忘记更新:
从一个邮件服务商切换到另一个时,请删除旧的 include 并添加新的。
使用 +all:
切勿使用 +all,这会授权任何人代表你的域名发件。
深入理解 DKIM(域名密钥识别邮件)
DKIM(DomainKeys Identified Mail,域名密钥识别邮件)为你的邮件添加加密签名,证明邮件来自你的域名且在传输过程中未被修改。
DKIM 的工作原理
DKIM 使用公钥密码学:
- 邮件服务商生成公钥/私钥对
- 你将公钥发布到 DNS
- 服务商用私钥对发出的邮件进行签名
- 接收服务器从 DNS 获取你的公钥
- 用公钥验证签名
- 有效签名证明真实性和完整性
DKIM 签名的内容:
DKIM 签名通常涵盖特定邮件头和正文:
- From 头(必须)
- Subject 头
- Date 头
- 邮件正文
- 其他已配置的头
这可以防止攻击者在发送后修改这些内容。
DKIM 记录结构
DKIM 记录以 TXT 记录形式发布,命名格式如下:
selector._domainkey.yourdomain.com选择器(selector)是一个唯一标识符,允许你拥有多个 DKIM 密钥。不同邮件服务使用不同的选择器(如 brevo、google、s1、s2)。
DKIM 记录内容:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...| 标签 | 说明 | 示例 |
|---|---|---|
| v= | 版本(固定为 DKIM1) | v=DKIM1 |
| k= | 密钥类型(通常为 rsa) | k=rsa |
| p= | 公钥(base64 编码) | p=MIGfMA0… |
| t= | 标志(可选) | t=s(严格模式) |
| h= | 哈希算法(可选) | h=sha256 |
配置 DKIM 的步骤
第一步:生成 DKIM 密钥
邮件服务商通常会为你生成密钥。在 Brevo 中:
- 进入设置 > 发件人、域名和专用 IP
- 选择你的域名
- 找到 DKIM 部分
- 复制提供的 DNS 记录
对于自托管邮件服务器,使用 OpenSSL 生成密钥:
openssl genrsa -out private.key 2048openssl rsa -in private.key -pubout -out public.key第二步:添加 DKIM DNS 记录
在 DNS 管理界面:
- 类型:TXT
- 主机/名称:selector._domainkey(如 brevo._domainkey)
- 值:服务商提供的 DKIM 记录
- TTL:3600
第三步:启用 DKIM 签名
在邮件服务商的设置中,为你的域名启用 DKIM 签名,告知服务商对外发邮件进行签名。
第四步:验证配置
发送测试邮件并检查邮件头中的 DKIM-Signature。可使用以下工具:
- mail-tester.com
- DKIM Validator
- MXToolbox DKIM Lookup
DKIM 最佳实践
使用 2048 位密钥:
旧版 1024 位密钥被认为安全性不足。现代安全标准建议最低使用 2048 位 RSA 密钥。
定期轮换密钥:
虽然没有严格要求,但每年轮换一次 DKIM 密钥是良好的安全实践。添加新密钥后再删除旧密钥,避免出现认证空窗期。
监控密钥泄露:
如果私钥泄露,攻击者就能以你的身份签名邮件。需监控异常的认证模式。
为不同服务使用不同选择器:
每个邮件服务商应使用唯一的选择器,方便独立管理密钥,不会与其他服务冲突。
检查 DNS 传播情况:
DKIM 密钥可能较长。确认你的 DNS 服务商支持足够长度的 TXT 记录。部分服务商需要将密钥拆分为多个字符串。
解读 DKIM 邮件头
收到邮件时,DKIM-Signature 头会显示:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=brevo; h=from:to:subject:date:message-id; bh=base64hashofbody; b=base64signature;| 标签 | 含义 |
|---|---|
| v= | 版本(固定为 1) |
| a= | 算法(推荐 rsa-sha256) |
| c= | 规范化方式(relaxed 允许微小改动) |
| d= | 签名域名 |
| s= | 选择器 |
| h= | 已签名的邮件头 |
| bh= | 正文哈希值 |
| b= | 签名 |
深入理解 DMARC(基于域名的邮件认证、报告与一致性)
DMARC 在 SPF 和 DKIM 的基础上增加了策略执行和报告功能。它告诉接收服务器在认证失败时应如何处理邮件,并向你发送认证结果报告。
DMARC 的工作原理
DMARC 增加了两项关键能力:
- 策略执行:定义接收方在认证失败时应如何处理邮件
- 报告:接收关于谁在使用你的域名发件的数据
DMARC 验证流程:
- 接收服务器收到声称来自你域名的邮件
- 检查 SPF(发送 IP 是否匹配?)
- 检查 DKIM(签名是否有效?)
- 检查 DMARC 对齐(已认证的域名是否与 From 头匹配?)
- 如果对齐失败,应用你的 DMARC 策略
- 向你发送汇总报告和/或取证报告
DMARC 对齐
DMARC 要求 From 头中的域名与通过 SPF 或 DKIM 认证的域名对齐:
SPF 对齐: 退信路径(信封发件人)中的域名必须与 From 头域名匹配或为其子域名。
DKIM 对齐: DKIM 签名中的域名(d= 标签)必须与 From 头域名匹配或为其子域名。
对齐模式:
| 模式 | 说明 |
|---|---|
| 严格(s) | 要求完全匹配域名 |
| 宽松(r) | 允许子域名(默认) |
宽松对齐时,如果 From 头显示 [email protected],DKIM 使用 brevo.example.com 签名,则对齐通过,因为两者共享 example.com 组织域名。
DMARC 记录语法
DMARC 记录以 TXT 记录形式发布在 _dmarc.yourdomain.com:
v=DMARC1; p=reject; rua=mailto:[email protected]; pct=100必需标签:
| 标签 | 说明 | 取值 |
|---|---|---|
| v= | 版本 | DMARC1(固定) |
| p= | 策略 | none、quarantine、reject |
可选标签:
| 标签 | 说明 | 默认值 |
|---|---|---|
| rua= | 汇总报告地址 | 无 |
| ruf= | 取证报告地址 | 无 |
| pct= | 策略应用比例 | 100 |
| sp= | 子域名策略 | 与 p= 相同 |
| adkim= | DKIM 对齐模式 | r(宽松) |
| aspf= | SPF 对齐模式 | r(宽松) |
| fo= | 取证报告选项 | 0 |
| ri= | 报告间隔(秒) | 86400 |
DMARC 策略详解
p=none(仅监控):
对失败不采取任何行动,正常投递邮件。在分析报告、修复认证问题期间使用此策略。
v=DMARC1; p=none; rua=mailto:[email protected]p=quarantine(进入垃圾邮件箱):
失败的邮件被发送到垃圾/垃圾邮件文件夹。是正式拒绝前的良好过渡步骤。
v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100p=reject(拦截):
失败的邮件被完全拒绝。保护力度最强,但需先确保所有合法来源都能通过认证。
v=DMARC1; p=reject; rua=mailto:[email protected]; pct=100配置 DMARC 的步骤
第一步:确保 SPF 和 DKIM 已正确配置
DMARC 依赖 SPF 和 DKIM。在添加 DMARC 之前,请先验证两者均已正确配置。
第二步:从监控策略开始(p=none)
先使用最宽松的策略收集数据,不影响正常送达:
v=DMARC1; p=none; rua=mailto:[email protected]第三步:添加 DNS 记录
在 DNS 管理界面:
- 类型:TXT
- 主机/名称:_dmarc
- 值:你的 DMARC 记录
- TTL:3600
第四步:分析报告 2 至 4 周
DMARC 汇总报告每天以 XML 文件形式发送,内容包括:
- 使用你域名发送邮件的 IP 地址
- SPF 和 DKIM 通过率/失败率
- DMARC 对齐结果
- 接收服务器的处理措施
使用 DMARC 报告分析工具可视化这些数据:
- DMARC Analyzer
- Postmark DMARC
- Valimail
- dmarcian
第五步:修复认证问题
报告中常见的问题包括:
- 合法服务未包含在 SPF 中
- 某发件服务未启用 DKIM
- 第三方服务未经适当认证即发件
- 邮件转发破坏了 SPF 对齐
第六步:逐步收紧策略
合法来源稳定通过认证后:
- 切换为
p=quarantine; pct=10(对 10% 的失败邮件执行隔离) - 将 pct 逐步提升至 25、50、75、100
- 切换为
p=reject; pct=10 - 逐步提升至完全拒绝
第七步:持续维护与监控
继续审查报告。新的发件来源、服务商变更或配置偏差都可能导致认证失败。
解读 DMARC 报告
汇总报告(rua):
每日 XML 汇总,内容包括:
- 报告机构
- 日期范围
- 你发布的策略
- 按来源 IP 分类的认证结果
- 邮件数量
示例片段:
<record> <source_ip>203.0.113.10</source_ip> <count>1250</count> <policy_evaluated> <disposition>none</disposition> <dkim>pass</dkim> <spf>pass</spf> </policy_evaluated></record>取证报告(ruf):
针对失败邮件的单条详细信息。内容更详尽但涉及隐私。许多接收方不发送取证报告。
DMARC 最佳实践
始终从 p=none 开始:
直接跳到 reject 可能会拦截合法邮件。请先监控。
为报告使用专用邮箱:
DMARC 报告数量可能很多。使用专用地址或第三方服务接收。
设置子域名策略(sp=):
如果你不从子域名发件,设置 sp=reject 可防止子域名被仿冒。
使用百分比(pct=)逐步推进:
pct 标签允许你对一定比例的失败邮件执行策略,同时继续监控其余部分。
考虑使用专业 DMARC 服务:
对于大型组织,Valimail、dmarcian 或 Postmark DMARC 等服务提供比原始 XML 文件更好的报告分析功能。
DNS 记录配置:完整操作指南
配置邮件身份认证需要添加特定的 DNS 记录。本节提供主要 DNS 服务商的完整操作说明。
收集所需信息
开始前,请从邮件服务商处收集以下信息:
SPF 所需:
- 所有 include 声明(如 include:spf.brevo.com)
- 需要授权的任何特定 IP 地址
DKIM 所需:
- 选择器名称(如 brevo、google、s1)
- 完整的 DKIM 密钥值
DMARC 所需:
- 报告邮箱地址
在常见 DNS 服务商中添加记录
Cloudflare:
- 登录 Cloudflare 仪表板
- 选择你的域名
- 进入 DNS > 记录
- 点击添加记录
- SPF:类型=TXT,名称=@,内容=你的 SPF 记录
- DKIM:类型=TXT,名称=selector._domainkey,内容=DKIM 密钥
- DMARC:类型=TXT,名称=_dmarc,内容=DMARC 记录
- 点击保存
Google Domains/Squarespace:
- 进入域名的 DNS 设置
- 滚动到自定义记录
- 点击管理自定义记录
- 为每条记录填写对应的类型、主机名和数据
- SPF:主机名=@,类型=TXT,数据=SPF 记录
- DKIM:主机名=selector._domainkey,类型=TXT,数据=DKIM 密钥
- DMARC:主机名=_dmarc,类型=TXT,数据=DMARC 记录
GoDaddy:
- 进入我的产品 > 域名
- 点击域名旁的 DNS
- 滚动到记录部分
- 为每条新记录点击添加
- 类型选择 TXT
- 填写名称(SPF 填 @,DKIM 填 selector._domainkey,DMARC 填 _dmarc)
- 填写值
- 保存
Namecheap:
- 进入域名列表 > 管理
- 点击高级 DNS
- 为每条记录点击添加新记录
- 选择 TXT 记录
- 主机:SPF 填 @,DKIM 填 selector._domainkey,DMARC 填 _dmarc
- 值:填写记录内容
- 保存所有更改
DNS 传播
添加记录后,更改需要一定时间才能全球生效,通常需要:
- 5 至 30 分钟开始生效
- 最多 48 小时完全全球传播
使用 dig 或 nslookup 验证:
dig TXT yourdomain.comdig TXT selector._domainkey.yourdomain.comdig TXT _dmarc.yourdomain.com也可以使用 whatsmydns.net 等在线工具检查全球传播情况。
完整配置示例
使用 Brevo 和 Google Workspace 的域名配置示例:
SPF 记录(@ 的 TXT 记录):
v=spf1 include:spf.brevo.com include:_spf.google.com -allBrevo 的 DKIM 记录(brevo._domainkey 的 TXT 记录):
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA... [来自 Brevo 仪表板的密钥]Google 的 DKIM 记录(google._domainkey 的 TXT 记录):
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BA... [来自 Google 管理员的密钥]DMARC 记录(_dmarc 的 TXT 记录):
v=DMARC1; p=none; rua=mailto:[email protected]邮件身份认证与 Brevo
Brevo 提供全面的邮件身份认证支持,让你轻松为发件域名配置 SPF、DKIM 和 DMARC。
在 Brevo 中配置认证
第一步:添加域名
- 登录 Brevo 账号
- 进入设置 > 发件人、域名和专用 IP
- 点击添加域名
- 输入你的域名
第二步:配置 SPF
Brevo 提供需要添加到 DNS 的 SPF include:
include:spf.brevo.com将其添加到现有 SPF 记录,或新建一条:
v=spf1 include:spf.brevo.com -all第三步:配置 DKIM
Brevo 自动生成 DKIM 密钥。复制提供的记录:
- 进入 Brevo 的域名设置
- 找到 DKIM 部分
- 复制 DNS 记录名称和值
- 将 TXT 记录添加到 DNS
第四步:验证配置
Brevo 会自动检查你的 DNS 记录。绿色勾选标记表示配置成功。
正确配置 Brevo 认证的好处
为 Brevo 正确配置认证后:
- 更高的收件箱到达率:Gmail、Microsoft 等服务商信任已认证的邮件
- 品牌保护:DMARC 防止你的域名被仿冒
- 更准确的分析:准确追踪打开率和点击率
- 声誉积累:持续认证有助于建立发件人声誉
Tajo 集成优势
使用 Tajo 将 Shopify 商店与 Brevo 连接,可获得额外优势:
- 自动同步客户数据:客户数据无缝流入 Brevo,支持个性化邮件
- 事件追踪:购买、浏览和购物车事件触发已认证的事务性邮件
- 多渠道协调:在邮件、短信和 WhatsApp 间保持一致的认证
- 统一分析:将邮件表现与其他营销指标一起追踪
正确的邮件认证与实时客户数据同步相结合,确保你的邮件不仅能到达收件箱,还能与每位收件人产生共鸣。
总结
通过 SPF、DKIM 和 DMARC 实现邮件身份认证,对于依赖邮件通讯的企业来说已不可或缺。这些协议保护你的品牌免受仿冒,提升送达率,并为有效的邮件营销奠定信任基础。
核心要点:
- SPF 通过 DNS 授权发送服务器
- DKIM 用加密签名证明邮件真实性
- DMARC 执行策略并通过报告提供可见性
- 在执行拒绝策略前,先从监控(p=none)开始
- 所有合法发件来源必须正确配置
- 定期监控防止配置偏差
对于使用 Shopify 的电商企业,将正确的邮件认证与通过 Tajo 和 Brevo 实现的客户数据集成相结合,可以打造强大的基础。事务性邮件可靠地到达客户,营销活动获得更好的收件箱到达率,品牌也免受仿冒攻击。
准备好提升邮件送达率了吗?按照本指南中的工具检查当前的认证配置,然后按照分步说明系统地配置 SPF、DKIM 和 DMARC。
了解 Tajo 如何与 Brevo 集成,为你的 Shopify 商店提供无缝的邮件认证以及实时客户数据同步。