网站 / SEO · 邮件

SPF/DKIM/DMARC

邮件三大反钓鱼记录解析/校验

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 66 次使用
输入域名 · 检测 SPF / DKIM / DMARC 邮件防伪记录
示例
正在查询 DNS TXT 记录…
读取 SPF / DKIM / DMARC 记录,请稍候
!
检测失败
0
/3
配置项
email authentication
输入域名后点击「检测」查询 SPF / DKIM / DMARC 记录
就绪 · 同源 API 查询权威 DNS TXT 记录
第一节

关于本工具

About

收到一封声称来自银行的邮件,域名是 `bank.com`,但 `Return-Path` 指向 `spam.ru`——SPF 检查会直接把它标记为伪造。这个工具同时解析并校验 SPF、DKIM 和 DMARC 三条 DNS 记录:SPF 看发信 IP 是否被授权,DKIM 验签名是否被篡改,DMARC 则告诉收件服务器怎么处置未通过检查的邮件。记录提交到后端解析,原始文本和校验结果并排展示,方便排查配置遗漏或语法错误。

使用场景

新域名上线前检查

市场部为双十一活动注册了二级域名 `promo.xxx.com`,IT 部门在 DNS 里配好了 SPF 记录。但运营同事发现,用 Gmail 从该域名发测试邮件时,偶尔会进垃圾箱。面对“活动邮件被拒收”和“临时改配置影响上线”的两难,用本工具解析该域名,逐一校验 SPF 的 IP 范围是否包含发信服务器、DKIM 签名是否与公钥匹配、DMARC 策略是否设置正确。结果发现 SPF 漏配了第三方邮件服务商的 IP 段,补上后邮件全部正常投递。

邮件被退信后排查

客户反馈连续三天没收到公司的报价单,客服查日志发现对方服务器返回 `550 5.7.1` 退信,原因是“SPF check failed”。销售总监要求 2 小时内解决,否则丢单。运维人员用本工具输入发信域名,立即看到 SPF 记录里 `include` 的第三方域已过期,导致发信 IP 不在白名单中。同时 DKIM 签名算法显示为 `rsa-sha256`,但公钥长度只有 512 位——对方邮件网关判定为弱签名。修复这两项后,邮件恢复送达。

接管旧域名前审计

公司收购了一个老品牌,要迁移其邮件系统。收购前,技术负责人需要评估该域名现存的邮件安全配置是否合规。用本工具输入域名,发现其 DMARC 记录为 `p=none`,意味着攻击者可以伪造该域名发钓鱼邮件而不被拦截。SPF 记录里还残留着原托管商已停用的 IP 段,DKIM 公钥指向一个已注销的第三方服务。这些风险项被逐条列出,迁移团队据此制定了“先收紧 DMARC 策略、清除无效 SPF 段、重新部署 DKIM”的接管方案,避免了上线后邮件被伪造或误判。

钓鱼举报后自证清白

公司域名被钓鱼团伙冒用,发送了带有伪造发件人的诈骗邮件。受害企业向本公司投诉,要求立即封禁该域名。法务部门需要快速证明“本公司域名配置了严格的邮件认证,冒用邮件不可能通过验证”。运维人员用本工具导出当前域名的 SPF、DKIM、DMARC 记录截图,显示 DMARC 策略为 `p=reject`,且 DKIM 签名时间戳与钓鱼邮件时间不符。这份报告提交给投诉方和邮件服务商后,确认冒用邮件因未通过认证而被拦截,本公司域名未被污染,避免了误封。

第三方邮件服务切换验证

公司准备把邮件发送服务从 SendGrid 切换到 Amazon SES,IT 经理需要确认新配置上线后,现有 SPF 和 DKIM 记录是否兼容。用本工具分别解析新旧两个服务商的发信 IP 和 DKIM 公钥,发现旧 SPF 记录中 `include:sendgrid.net` 和新 `include:amazonses.com` 不能同时保留(会超过 DNS 查询限制 10 次)。工具直接标出“SPF 记录包含 9 个查询,添加新 include 后将超限”,提示需要合并或清理冗余项。切换团队据此删除了已废弃的第三方引用,确保新配置生效后邮件认证不失败。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「域名」输入框粘贴待检查的域名(如 example.com),自动开始解析 SPF 记录
  2. 2展开「DKIM」标签,输入选择器名称(如 default)和域名,点击「查询」获取公钥记录
  3. 3在「DMARC」标签输入域名,结果区显示策略(none/quarantine/reject)及报告地址
  4. 4每条记录旁显示「语法校验」状态:绿色通过、红色报错并定位具体语法错误位置
  5. 5点击「批量检查」按钮,换行输入多个域名,结果以表格对比展示各记录缺失情况

输入输出示例

输入输出说明
v=spf1 include:_spf.google.com ~allSPF 记录解析结果: - 机制:include - 目标域:_spf.google.com - 限定符:~all(软失败) - 校验:格式合法,需递归查询 _spf.google.com 的 SPF 记录常规:Google 邮件常用 SPF 记录,验证基础解析和 include 机制
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrL...DKIM 记录解析结果: - 版本:DKIM1 - 密钥类型:rsa - 公钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrL...(截断) - 校验:公钥格式合法,可配合签名验证常规:典型 DKIM 公钥记录,验证 RSA 密钥解析和截断显示
v=DMARC1; p=reject; rua=mailto:dmarc@example.comDMARC 记录解析结果: - 策略:reject(拒绝) - 报告地址:dmarc@example.com - 校验:策略值合法,报告地址格式正确常规:DMARC 最严格策略,验证策略字段和报告地址解析
v=spf1 mx -allSPF 记录解析结果: - 机制:mx - 限定符:-all(硬失败) - 校验:格式合法,需查询 MX 记录边界:仅使用 mx 机制的极简 SPF,验证无 include/ip4 的纯 MX 场景
v=spf1 ip4:192.168.0.0/16 -allSPF 记录解析结果: - 机制:ip4 - 网段:192.168.0.0/16 - 限定符:-all(硬失败) - 校验:CIDR 格式合法,但 192.168.0.0/16 为私有地址,实际邮件不会使用边界:私有 IP 段,验证 CIDR 解析和地址合法性提示
v=spf1 include:spf.example.com include:spf.example2.com include:spf.example3.com include:spf.example4.com include:spf.example5.com include:spf.example6.com include:spf.example7.com include:spf.example8.com include:spf.example9.com include:spf.example10.com include:spf.example11.com -allSPF 记录解析结果: - 机制:include(共 11 个) - 限定符:-all(硬失败) - 校验:格式合法,但 include 数量超过 10 个,超出 RFC 7208 推荐限制,可能导致 DNS 查询超时边界:include 数量超 RFC 限制,验证工具对超出推荐限制的警告
v=spf1 a:mail.example.com -allSPF 记录解析结果: - 机制:a - 目标域:mail.example.com - 限定符:-all(硬失败) - 校验:格式合法,需查询 A 记录易错:a 机制后跟域名而非 IP,常见误用为 a:192.168.1.1(应为 ip4:192.168.1.1),验证机制区分
v=DMARC1; p=quarantine; pct=50DMARC 记录解析结果: - 策略:quarantine(隔离) - 百分比:50% - 校验:策略值合法,百分比范围 0-100,格式正确易错:pct 字段常被忽略,验证百分比策略的解析和范围检查

常见错误对照

1.SPF 记录中 IP 段掩码写错

✗ 错误v=spf1 ip4:192.168.1.0/24 include:_spf.google.com ~all
✓ 修复v=spf1 ip4:192.168.1.0/24 include:_spf.google.com ~all

SPF 中 ip4 段掩码必须为 0-32,ip6 为 0-128;写错掩码(如 /33)会导致解析失败,收件方拒绝整条记录。

2.DKIM 选择器与 DNS 记录名不匹配

✗ 错误DNS 记录名为 default._domainkey.example.com,但邮件头中 s=myselector
✓ 修复邮件头 s=default,DNS 记录名为 default._domainkey.example.com

DKIM 签名头里的 s= 值必须与 DNS 记录的选择器名称完全一致;不匹配则验证方找不到公钥,校验失败。

3.DMARC 策略写 p=none 却不监控

✗ 错误v=DMARC1; p=none; rua=mailto:dmarc@example.com
✓ 修复v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com

p=none 仅报告不处理,若想实际拦截钓鱼邮件需将策略改为 quarantine 或 reject;仅设 p=none 等于未启用防护。

4.SPF 记录中 include 机制写错域名

✗ 错误v=spf1 include:spf.google.com ~all
✓ 修复v=spf1 include:_spf.google.com ~all

Google 官方 SPF 记录域名是 _spf.google.com,非 spf.google.com;写错 include 会导致该机制失效,合法邮件可能被拒收。

5.DKIM 公钥记录中 p= 值含多余空格

✗ 错误v=DKIM1; p= MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...
✓ 修复v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...

DKIM 公钥 p= 后必须紧跟 Base64 字符串,不能有空格;多余空格导致 DNS 解析时公钥格式错误,验证失败。

6.DMARC 报告地址 rua/ruf 格式错误

✗ 错误v=DMARC1; p=reject; rua=dmarc@example.com
✓ 修复v=DMARC1; p=reject; rua=mailto:dmarc@example.com

DMARC 规范要求 rua 和 ruf 值必须包含 mailto: 前缀;缺少前缀则收件方无法解析报告接收地址,报告不会发送。

7.SPF 记录中 ~all 与 -all 混用

✗ 错误v=spf1 ip4:203.0.113.0/24 ~all -all
✓ 修复v=spf1 ip4:203.0.113.0/24 -all

SPF 记录只能有一个 all 机制;同时写 ~all 和 -all 会导致后一个覆盖前一个,且违反 RFC 7208 语法,解析器可能报错。

8.DKIM 签名头中 h= 字段顺序错乱

✗ 错误h=from:to:subject:date; bh=...; b=...
✓ 修复h=from:to:subject:date; bh=...; b=...

DKIM 签名头 h= 中列出的字段顺序必须与邮件实际头部顺序一致;顺序错乱会导致签名验证时哈希计算不匹配。

第三节

工作原理

How It Works

核心公式

SPF 通过 = (ip ∈ 授权列表) ∧ (all 机制 ≠ -all 或 未命中时 all 机制为 ~all 且通过)

变量说明

  • ip发件服务器 IP 地址
  • 授权列表SPF 记录中 a/mx/ip4/ip6/include 声明的 IP 集合
  • all 机制SPF 记录末尾的 +all/-all/~all/?all 策略

示例

假设 SPF 记录为 v=spf1 ip4:192.0.2.0/24 include:_spf.example.com ~all,发件 IP 为 203.0.113.5。首先检查 IP 是否在 192.0.2.0/24 内:203.0.113.5 不在该段。然后递归查询 _spf.example.com 的 SPF 记录,假设其授权列表包含 203.0.113.0/24,则 203.0.113.5 命中。最终 all 机制为 ~all(软失败),但已命中授权列表,因此结果为通过(Pass)。若 IP 为 198.51.100.2,不在任何授权段,且 all 为 ~all,则结果为软失败(SoftFail)。

输入域名 / 邮箱DNS 查询(SPF / DKIM / DMARC)解析记录元素(机制 / 策略 / 值)逐条校验(语法 / 逻辑 / 冲突)输出校验报告(通过 / 警告 / 错误)
用户输入 DNS 查询 / 校验 解析 / 输出
第五节

常见问题

Q & A
我粘贴了 SPF 记录,但提示“语法错误”,这是什么情况?

SPF 记录写在 DNS TXT 记录里,常见语法错误包括:缺少 v=spf1 开头、双引号未闭合、IP 段格式不对(如 192.168.1 少一位)、include 的域名不存在或没 TXT 记录。本工具会高亮具体出错位置和类型,例如“ip4:192.168.1/24 写成了 ip4:192.168.1/24/32”会提示段长冲突。建议先复制原始 TXT 记录,不要手动改格式。

DKIM 记录解析出来的“选择器”是干嘛的?我怎么知道我用哪个?

选择器(selector)是 DKIM 记录的前缀,比如 default._domainkey 里的 default。同一个域名可以配多个 DKIM 密钥对,通过选择器区分。你需要在发信程序(如 Postfix、SendGrid)的配置里找到 selector 值,和本工具解析出来的必须一致。如果不一致,签名会校验失败。工具结果页会直接展示 selector 字段,你拿去和发信配置对比即可。

DMARC 记录的 p=none 和 p=reject 到底有多大区别?

p=none 只生成报告,不拦截邮件;p=reject 直接拒绝未通过 SPF/DKIM 的邮件。实际区别在于:p=none 时,邮箱服务商(如 Gmail、QQ)仍会将可疑邮件投递到垃圾箱,但发件方收不到退信;p=reject 时,发件方会收到 550 退信,收件方根本看不到邮件。本工具会额外提示:如果你从 none 切到 reject,建议先用 p=quarantine 过渡 1-2 周,看误报率。

我查了别人的域名,显示 SPF 记录是空的,是不是说明对方没配?

不一定。SPF 记录为空有两种可能:一是真没配(DNS 没有 TXT 记录或没有 v=spf1 开头),二是配了但用 CNAME 或不同子域名。本工具默认只查主域名(如 example.com),如果对方把 SPF 写在子域名 mail.example.com 上,主域名查询会显示空。你可以手动切换查询域名试试。另外,某些 CDN 或邮件服务商会在网络层过滤 TXT 记录,导致偶尔查询失败。

为什么我配置了 SPF 和 DKIM,对方还是收到垃圾邮件?

配置正确不等于所有邮件都被信任。常见原因:1)SPF 的 include 链太长(超过 10 次 DNS 查询)会被截断,导致部分合法发信 IP 被跳过;2)DKIM 签名过期或选择器不匹配;3)DMARC 策略设成 p=none,邮箱服务商不强制拦截。本工具校验结果里会分别显示每条记录的“对齐”状态(严格/宽松/不匹配),重点看 DMARC 的“对齐通过率”是不是 100%。

这个工具查到的记录和我在命令行 dig 的结果不一样,哪个准?

理论上 dig 的结果更原始,但本工具做了多层容错:1)自动补全域名末尾的点(FQDN);2)处理 CNAME 链;3)对 TXT 记录里的引号和转义符做标准化。差异通常出现在:你的 dig 没加 +short 导致看到完整响应包(含 TTL、权威标志),而工具只提取内容;或者 DNS 缓存不同(你的本地 DNS 和工具用的公共 DNS 不一致)。工具页面底部标注了当前使用的 DNS 服务器(如 8.8.8.8),你可以用 dig @8.8.8.8 对比。

我域名有多个 SPF 记录,工具报错说“存在多条”,要怎么合并?

DNS 规范不允许同一域名存在多条 SPF 记录(会随机选择一条,导致校验不稳定)。本工具检测到多条时会报错并列出所有内容。合并方法:保留一条 v=spf1,把其他记录里的 include、ip4、a 等机制全部复制到这一条里,用空格分隔。注意 include 有 10 次 DNS 查询上限,如果合并后超过,需要精简或改用 ip4 直接写 IP 段。工具结果页会给出当前总查询次数。

校验结果里“SPF 软失败”是什么意思,邮件会被拒吗?

软失败(~all)表示发件 IP 不在白名单内,但收件方通常不拒收,只标记为可疑。和硬失败(-all)的区别:~all 的邮件会进垃圾箱,-all 的直接退信。如果你看到“软失败”,说明 SPF 记录里最后一项是 ~all,且当前发件 IP 不在前面的 ip4/include 列表中。本工具会列出“未匹配的 IP 段”,你可以把那个 IP 加到 SPF 记录里,或改为 -all 强制拒绝。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭