邮件认证原理
High Contrast
Dark Mode
Light Mode
Sepia
Forest
4 min read757 words

邮件认证原理

你用 noreply@example.com 给客户发邮件,结果进了垃圾箱。大多数情况下,原因是 SPF、DKIM、DMARC 三个 DNS 记录没配置好。


为什么需要邮件认证

电子邮件协议(SMTP)设计于 1982 年,没有内置的身份验证机制。任何人都可以声称自己是 noreply@google.com 发邮件。

邮件认证的三个标准(SPF / DKIM / DMARC)解决的就是这个问题:证明这封邮件确实来自你的域名,而不是被伪造的


三个标准各自解决什么问题

graph TD A[SPF] -->|"这台服务器有资格
代表我的域名发邮件吗?"| B[验证发送方 IP] C[DKIM] -->|"这封邮件在传输过程中
有没有被篡改?"| D[邮件内容签名验证] E[DMARC] -->|"SPF 或 DKIM 验证失败了,
邮件应该怎么处理?"| F[策略 + 报告机制]
标准 验证方式 存储位置 作用
SPF 检查发件服务器 IP DNS TXT 记录 声明哪些 IP/服务允许代表你发邮件
DKIM 检查邮件数字签名 DNS TXT 记录(公钥)+ 邮件头(签名) 防止邮件内容被篡改
DMARC 组合 SPF + DKIM 结果 DNS TXT 记录 定义验证失败时的处理策略

SPF(Sender Policy Framework)

原理

  1. 你在 DNS 中声明:example.com 允许哪些服务器发邮件
  2. 收件服务器收到邮件,查 example.com 的 SPF 记录
  3. 检查发件服务器 IP 是否在允许列表中
  4. 通过 → 加分;失败 → 扣分或拒绝

SPF 记录格式:

v=spf1 [机制] [修饰符]
机制 说明 示例
ip4: 允许指定 IP 发送 ip4:203.0.113.0/24
include: 包含另一个域名的 SPF include:_spf.google.com
a 允许域名 A 记录对应的 IP a
mx 允许 MX 记录对应的服务器 mx
~all 其他来源软拒绝(标记为可疑) 结尾用
-all 其他来源硬拒绝 结尾用(严格)
?all 中性,不影响判断 测试时用

常见 SPF 记录示例:

# 使用 Google Workspace 发邮件
"v=spf1 include:_spf.google.com ~all"
# 使用 Google + SendGrid
"v=spf1 include:_spf.google.com include:sendgrid.net ~all"
# 使用 Mailgun
"v=spf1 include:mailgun.org ~all"

DKIM(DomainKeys Identified Mail)

原理

  1. 发件服务器用私钥对邮件签名,签名附在邮件头中
  2. 你在 DNS 中发布对应的公钥
  3. 收件服务器用 DNS 中的公钥验证签名
  4. 签名有效 → 邮件内容未被篡改,来自授权服务器

DKIM 记录格式:

# DNS 中的 DKIM 记录
类型: TXT
名称: selector._domainkey.example.com
值: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."(公钥)

其中 selector 是选择器(通常是 googlemaildefault 等,由邮件服务提供商指定)。

不同邮件服务的 DKIM 配置: - Google Workspace:后台生成 DKIM 密钥 → 复制 TXT 值到 DNS - SendGrid:账户设置 → Sender Authentication → 按步骤添加 DNS 记录 - Mailgun:Domains → 按提示添加 DNS 记录


DMARC(Domain-based Message Authentication, Reporting & Conformance)

原理

DMARC 不直接验证,而是定义策略:当 SPF 和 DKIM 验证失败时,收件方应该怎么处理这封邮件?

DMARC 记录格式:

类型: TXT
名称: _dmarc.example.com
值: "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
参数 说明
p=none 仅报告,不处理(测试阶段使用)
p=quarantine 验证失败的邮件放入垃圾箱
p=reject 验证失败的邮件直接拒绝
rua= 汇总报告发送到哪个邮箱
pct=50 只对 50% 的邮件应用策略(渐进推进时用)

推荐部署顺序:

p=none(观察期)→ p=quarantine(过渡期)→ p=reject(严格模式)

下一节邮件记录配置实战——一步步在 DNS 中配置 SPF、DKIM、DMARC 完整示例。