兄弟们,有没有遇到过这种情况:辛辛苦苦写的开发信、报价单,客户那边死活收不到,一查邮件日志,被 Gmail/Outlook 扔进了垃圾箱,甚至直接退信。老板拍桌子问“怎么回事”,你查了一圈,发现都不是自己发出去的,而是有人冒充你们公司的邮箱在搞鬼。或者更憋屈的——你们自己发的正儿八经的商务邮件,被对方邮件系统当成“诈骗”给拦截了。
今天咱就聊聊怎么解决这个老大难问题。不扯那些又长又臭的 RFC 文档,用大白话把 SPF、DKIM、DMARC 这三个玩意儿的配置讲明白。
先打个比方:寄信怎么才不被邮局当垃圾?
假设你要寄一封信,收件人的邮局(比如 Gmail)有四个检查步骤:
- 这封信是从哪个邮筒寄出的? —— 这就是 SPF(发信人策略框架)。你要提前告诉全世界:“我公司的信,只有从 XX 邮局投递的才是真的,其他邮筒寄的一律是假的。”
- 信纸上有我的亲笔签名吗? —— 这就是 DKIM(域名密钥识别邮件)。发信的时候用一把钥匙给信加密,收件人用你放在 DNS 里的另一把钥匙验证。如果签名对上了,说明这封信确实是你写的,没被篡改。
- 邮局查到信是假的,该怎么处理? —— 这就是 DMARC(基于域名的消息认证报告和一致性)。你可以在 DNS 里设置规则:发现伪造邮件是扔进垃圾箱?直接拒收?还是发个报告给我看看谁在冒充我?
- 前面三个都配合好了,邮局才会放心把信放进收件箱。
很多公司只配了 SPF,或者根本没配,结果就是被各大邮箱服务商无情标记。特别是你们用了第三方发信平台(比如 Mailchimp、SendCloud、阿里云企业邮发的营销邮件),不加 SPF 和 DKIM,百分之百进垃圾箱。
一步一步来,手把手教你配
第一步:配 SPF —— 告诉世界“谁有权替我发信”
打开你域名的 DNS 解析控制台(阿里云 DNS、Cloudflare、DNSPod 都一样),添加一条 TXT 记录。
举个栗子:你公司域名 example.com,平时用腾讯企业邮发信,也用 Mailchimp 发营销邮件。那么 SPF 记录应该这么写:
v=spf1 include:spf.tencent.com include:servers.mcsv.net -all
解释一下:
include:后面是允许替你发信的服务器 IP 或域名。腾讯邮箱的 SPF 段、Mailchimp 的 SPF 段都要加进去。-all表示“除了我列出的,其他所有的发信 IP 都是假的,直接拒收”。有些公司怕配错了影响正常发信,会用~all(软失败,只是标记但不拒收),但建议最终改成-all,防伪效果更好。
注意: 一个域名只能有一条 SPF 记录,如果重复添加会导致验证失败。以前见过有人加了好几条,结果全废了,查 DNS 发现返回了多条记录。解决办法就是把所有 include 合并到一行。
第二步:配 DKIM —— 给你的邮件盖个防伪章
DKIM 需要生成一对密钥:私钥留在你的邮件服务器里,公钥放到 DNS 里。大部分邮件服务商(比如腾讯企业邮、Exchange Online、阿里云企业邮)的配置界面都会自动生成一个 DKIM 值,你只需要把对应的 TXT 记录复制到 DNS 就行。
以腾讯企业邮为例:
- 登录企业邮管理后台,找到“域名设置 - DKIM”。
- 会看到一条类似
v=DKIM1; k=rsa; p=MIGf...的 TXT 值。 - 在 DNS 里添加一条
xxx._domainkey.example.com的 TXT 记录,值就是上面那串。注意有些厂商会要求多次添加(比如同一个域名下多个选择器),照做即可。
为什么 DKIM 重要? 因为光有 SPF 只能验证发件 IP,但邮箱服务器换了运营商怎么办?或者你用了第三方转发(比如 Gmail 代收企业邮箱),SPF 就不够了。DKIM 是直接验证邮件内容是否被篡改,更加准确。
第三步:配 DMARC —— 制定“假邮件处置方案”
SPF 和 DKIM 都配好了,但还不够:万一某一个没通过,邮件服务器该咋办?DMARC 就是告诉你:如果 SPF 和 DKIM 都检查失败了,是放行、扔到垃圾箱还是直接拒收?
添加一条 TXT 记录,主机记录为 _dmarc.example.com,值像这样:
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-forensics@example.com; sp=none; pct=100
参数解释:
p=quarantine—— 没通过检查的邮件进入垃圾箱。可以先设这个,观察一段时间没问题再改成p=reject(直接拒收)。rua和ruf—— 邮件服务器会往这个邮箱发汇总报告和故障报告,帮你分析谁在冒充你发信。sp=none—— 子域名策略先不限制,等主域名稳定了再调整。
真实场景:我一个朋友的公司,老板总收到冒充他邮箱发的钓鱼邮件。配置了 DMARC 并设 p=quarantine 后,第二周就发现了一个国内外贸论坛的账号冒充他们域名发询盘,直接封了。
配置完了怎么验证?
别急,配完 DNS 记录后一般需要等几分钟到几小时才能生效(TTL 时间)。可以用一些在线工具检查:
- 用
dig TXT _dmarc.example.com查看 DMARC 记录是否生效。 - 用 Microsoft Remote Connectivity Analyzer 或者 MXToolbox 发一封测试邮件,检查 SPF/DKIM/DMARC 结果。
另外,一定要把 rua 邮箱监控起来。一开始你可能每天收到几十封报告,看多了就发现规律:哪个 IP 在尝试冒充你,哪个第三方平台配置有问题。根据报告调整 SPF 的 include 列表和 DKIM 选择器。
最后说几句心里话
这三个技术不是配了就完事的。随着公司业务变化,比如加了新的发信渠道、换了邮箱服务商,一定要同步更新 DNS 记录。而且建议先从 p=quarantine 开始,因为 p=reject 一旦配错,可能导致你们自己的邮件被拒收,老板的报价都发不出去——别问我怎么知道的。
如果你们公司邮箱总是莫名其妙进垃圾箱,别急着甩锅给运维或 IT 客服。先检查 SPF 配全了没,DKIM 签名加上没,DMARC 策略设了没。这三件套配好,大部分被误判的情况都能解决。
当然,企业邮箱安全不止这些,比如 DMARC 报告的解读、如何应对域名仿冒、还有更高级的 ARC/BIMI