Email

如何正确配置 SPF、DKIM 和 DMARC
防止邮件进入垃圾箱

更新:2026年9月9日  ·  阅读约12分钟  ·  分类:Email

SPF DKIM DMARC 邮件认证配置指南

邮件进入垃圾箱或被直接拒收会给企业造成重大损失——无论是订单确认、付款收据还是客户沟通。正确且持久的解决方案是在域名 DNS 中正确配置 SPF、DKIM 和 DMARC。本指南将解释每个系统的工作原理,并提供可直接使用的真实 DNS 记录示例。

什么是 SPF 及其工作原理

SPF(发件人策略框架)是一种 DNS 标准,用于声明哪些 IP 地址或服务器有权以您的域名发送邮件。当接收邮件服务器收到邮件时,它会查询 From/Return-Path 标头中域名的 TXT 记录,并与实际发件 IP 进行比对。

如果发件 IP 在 SPF 记录中 → SPF 通过 | 如果不在 → SPF 失败/软失败,这会提高垃圾邮件评分。

📌 为什么 SPF 重要: SPF 可防止邮件欺骗(Email Spoofing)——攻击者伪装成您的域名发送邮件,欺骗客户或进行网络钓鱼攻击。

SPF 工作流程

  1. 发件人从 IP 203.0.113.10 发送邮件,声称来自 [email protected]
  2. 接收邮件服务器查询 DNS:yourdomain.com TXT
  3. 获得 SPF 记录:v=spf1 ip4:203.0.113.0/24 ~all
  4. 检查 203.0.113.10 是否在 203.0.113.0/24 中 → ✅ 通过

什么是 DKIM 及其工作原理

DKIM(域名密钥识别邮件)是一种邮件数字签名系统,使用公私钥对工作——发件邮件服务器用私钥对外发邮件签名,接收方用发布在 DNS 中的公钥进行验证。

DKIM 的优势在于它还能验证邮件内容的完整性。如果邮件在传输过程中被篡改,DKIM 签名会立即失效。

邮件中附带的 DKIM 标头

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yourdomain.com;
  s=mail2026; t=1725854400;
  bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=;
  h=From:To:Subject:Date;
  b=signature_value_here...
字段含义
d=签发 DKIM 的域名
s=选择器名称(用于 DNS 查询)
bh=邮件正文的哈希值
b=数字签名本身

什么是 DMARC 及其工作原理

DMARC(基于域的邮件认证、报告和一致性)是一种策略,告诉接收邮件服务器当邮件 SPF 或 DKIM 失败时该怎么做,并将结果报告给域名所有者。

DMARC 还要求 SPF 或 DKIM 结果与 From: 标头中的域名对齐,而不仅仅是独立通过。

⚠️ 重要: DMARC 只有在至少配置了 SPF 或 DKIM 的情况下才能有效工作。如果两者都没有,DMARC 将始终失败。

三种 DMARC 策略级别

策略操作适用场景
p=none不采取行动,仅报告初始监控阶段
p=quarantine移入垃圾邮件/垃圾箱过渡阶段
p=reject完全拒绝邮件完全执行

SPF vs DKIM vs DMARC 对比

方面SPFDKIMDMARC
验证内容发件服务器 IP签名 + 内容策略 + 对齐
防护对象IP 欺骗邮件篡改域名欺骗(From:)
DNS 位置@ 的 TXT 记录selector._domainkey 的 TXT 记录_dmarc 的 TXT 记录
邮件转发可能失败通常通过取决于 SPF/DKIM
报告功能无无有(汇总 + 取证)

如何配置 SPF 记录

SPF 记录是位于根域(@)的 TXT 记录,始终以 v=spf1 开头。

基本语法

v=spf1 [机制...] [all]

常用 SPF 机制

机制含义示例
ip4:允许 IPv4 / 子网ip4:203.0.113.10
ip6:允许 IPv6ip6:2001:db8::/32
include:引用其他域的 SPFinclude:_spf.google.com
mx允许 MX 服务器mx
~all软失败——其他不允许(推荐)~all
-all硬失败——拒绝所有不匹配的-all

常用 SPF 记录示例

# 使用自己的邮件服务器和 Google Workspace
v=spf1 mx include:_spf.google.com ~all

# 直接指定 IP + Gmail
v=spf1 ip4:203.0.113.10 include:_spf.google.com -all

# 使用 AsiaGB 邮件服务
v=spf1 include:spf.asiagb.com ~all
💡 重要: 一个域名只能有一条 SPF 记录。如果有多条以 v=spf1 开头的 TXT 记录,SPF 会立即失败。请将所有内容合并到一条记录中。

在 DirectAdmin 中添加 SPF

  1. 登录 DirectAdmin → 邮件管理 → MX 记录
  2. 或进入 DNS 管理 → 选择您的域名
  3. 添加 TXT 记录:名称 = @ 或留空,值 = 您的 SPF 字符串
  4. 保存并等待 DNS 传播 0-48 小时

如何配置 DKIM 记录

DKIM 需要从您的邮件服务器生成密钥对。您需要:

  1. 在邮件服务器上生成私钥 + 公钥
  2. 配置邮件服务器使用私钥对外发邮件签名
  3. 通过 DNS TXT 记录发布公钥

DKIM DNS 记录格式

# 记录名称:
SELECTOR._domainkey.yourdomain.com

# 以选择器 "mail2026" 为例:
mail2026._domainkey.yourdomain.com

# 值:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...

使用 OpenSSL 生成 DKIM 密钥

# 生成私钥(2048 位 RSA)
openssl genrsa -out dkim_private.pem 2048

# 提取 DNS 用公钥
openssl rsa -in dkim_private.pem -pubout | grep -v "PUBLIC KEY" | tr -d '\n'
📌 DirectAdmin 中的 DKIM: DirectAdmin 通过邮件管理 → 域名邮件设置 → 启用 DKIM 来支持 DKIM,系统会自动生成密钥对并配置 DNS。

如何配置 DMARC 记录

DMARC 是位于根域名 _dmarc 子域名的 TXT 记录。

DMARC 记录格式

# 记录名称:
_dmarc.yourdomain.com

# 从监控模式开始:
v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1

# 中间阶段(隔离):
v=DMARC1; p=quarantine; pct=50; rua=mailto:[email protected]

# 完全执行(拒绝):
v=DMARC1; p=reject; rua=mailto:[email protected]; adkim=s; aspf=s

DMARC 标签说明

标签含义可用值
p=主策略none / quarantine / reject
pct=受策略影响的邮件百分比0-100(默认:100)
rua=汇总报告地址mailto:email@domain
ruf=取证报告地址mailto:email@domain
adkim=DKIM 对齐模式r(宽松)/ s(严格)
aspf=SPF 对齐模式r(宽松)/ s(严格)

安全的 DMARC 部署策略

  1. 第 1-2 周: p=none — 接收汇总报告,了解所有邮件来源
  2. 第 3-4 周: p=quarantine; pct=10 — 对 10% 的邮件开始执行
  3. 第 2 个月: p=quarantine; pct=100
  4. 第 3 个月起: p=reject — 完全执行

测试和验证配置

配置完成后,等待 DNS 传播 24-48 小时再进行测试。

推荐测试工具

工具测试内容网址
MXToolBoxSPF、DKIM、DMARCmxtoolbox.com/SuperTool
mail-tester.com综合评分 + 垃圾邮件评分mail-tester.com
DMARC Analyzer汇总报告dmarcanalyzer.com
Google Admin ToolboxGoogle 的 DNS 检查器toolbox.googleapps.com/apps/checkmx

通过命令行验证

# 检查 SPF
dig TXT yourdomain.com +short

# 检查 DKIM(选择器:mail2026)
dig TXT mail2026._domainkey.yourdomain.com +short

# 检查 DMARC
dig TXT _dmarc.yourdomain.com +short

配置正确的标志

💡 在 Gmail 中查看标头: 打开从您域名发送的邮件 → 三点菜单 → 显示原始邮件 → 查找 Authentication-Results 行,应该显示 spf=pass、dkim=pass、dmarc=pass

总结:上线前检查清单

  • ✅ 在 @ 处设置 SPF TXT 记录,只有一条
  • ✅ 在邮件服务器上启用 DKIM + 将公钥添加到 DNS
  • ✅ 在 _dmarc.yourdomain.com 处添加 DMARC 记录,从 p=none 开始
  • ✅ 等待 DNS 传播 24-48 小时
  • ✅ 使用 mail-tester.com 和 MXToolBox 测试
  • ✅ 1 周后读取 DMARC 汇总报告
  • ✅ 逐步将策略从 none → quarantine → reject

需要支持 SPF/DKIM/DMARC 并配备高级垃圾邮件过滤的邮件托管服务?AsiaGB 邮件过滤从第一天起就帮您正确配置一切。

常见问题解答

SPF、DKIM 和 DMARC 三个都需要设置吗?
强烈建议三个都设置。每个保护不同方面:SPF 验证发件 IP,DKIM 验证邮件签名和内容完整性,DMARC 执行策略。没有全部三个,您的邮件保护就不完整。
设置后为什么邮件还是进垃圾箱?
常见原因:DMARC 策略为 p=none(只监控不执行),邮件内容触发垃圾邮件过滤器,发件 IP 被列入黑名单,或域名信誉较新。请使用 mail-tester.com 或 MXToolBox 进行详细诊断。
DKIM 密钥应该多长?
建议至少使用 RSA 2048 位,或更短但更强的 ED25519。避免使用 512 或 1024 位密钥,因为 Google 和 Yahoo 自 2024 年起已拒绝接受。
DMARC 的 rua 和 ruf 有什么区别?
rua(汇总报告)是每日 XML 摘要,显示所有声称来自您域名的邮件来源。ruf(取证报告)在每次失败事件后立即发送。建议先设置 rua 进行监控,再考虑执行策略。
SPF 记录可以包含多少个 include?
SPF 每条记录最多支持 10 次 DNS 查询。include 语句过多会超过限制,导致 SPF 完全失败。请删除未使用的 include,或使用 SPF 展平服务解决此问题。