菜单

首页

全部入口

外观

位置:🇺🇸 美国
主站 gistwillan.top
返回博客
邮件 · 4 分钟

邮件进了垃圾箱?先看发信 IP 的三件事

PTR、SPF 查询上限与 DMARC 的上线顺序——在改文案之前,这三项能解释大多数投递失败。

数据中心内成排的网络机柜
Robert.Harker · CC BY-SA 3.0 Wikimedia Commons

事务邮件突然发不到了,第一反应往往是改文案。十次里有九次,收信方根本没读到文案——它在正文变得重要之前就已经做了决定,依据是谁在连、从哪里连。

收信服务器在正文之前的四项检查
顺序很重要:先修 PTR 与 SPF,再上 DMARC,反过来做只会把问题藏起来。

一、对方最先查的是 PTR

收信服务器会反查你的 IP,再把结果和你在 SMTP 握手时报的名字对比。云主机的默认反解长这样:ec2-13-52-1-9.compute-1.amazonaws.com——跟你的域名毫无关系,只是在替服务商做广告,很多规则看到就直接降分。把它改成你能控制的 mail.example.com,并让 HELO 字符串与它完全一致。HELO 与 PTR 不匹配,是过滤器能拿到的最廉价信号之一。

注意 PTR 通常不能自己设。在 VPS 上要走工单,在云上是一个弹性 IP 的选项。如果服务商干脆拒绝设置,那也说明了他预期这块 IP 被拿来做什么。

二、SPF 的十次查询是硬上限

SPF 求值时会解析每一个 include、a、mx、ptr,RFC 7208 把总查询数卡在十次。超了就是 permerror,收信方按失败处理——而且常常是静默的,因为没人盯着 permerror 看。营销平台、客服系统、CRM 三个 include 叠起来,不用谁手动加机制就能撞上线。

加下一个 include 之前先数查询次数,能扁平化就扁平化:服务商公布了固定网段,就用 ip4: 直接列出,而不是再嵌套一层 include。如果已经贴着上限,诚实的做法是用更少的服务商发信,而不是去改那个上限——你改不了。

三、先 DKIM,再分阶段上 DMARC

DKIM 用一对密钥给邮件签名,公钥放在 TXT 记录里,现在 2048 位是常态。最常见的错误是轮换 selector 的当天就把旧记录删掉,于是还在路上的邮件全部验签失败——旧 selector 至少保留一周。

DMARC 在更上一层,告诉收信方当 SPF 与 DKIM 都没有对齐 From 域时该怎么办。从 p=none 加一个 rua 邮箱起步,收两三周报告,再收紧到 quarantine,最后到 reject。跳过观察期,结果就是在切 reject 那天才发现:发票系统多年来一直通过一个未认证的中继发信。

四、共享 IP 还是独立 IP

  • 共享池便宜、而且自带温度,但你的声誉有一部分是邻居的。池子里一台被挂马的 WordPress,能让所有人的投递一起变差。
  • 独立 IP 一开始没有任何声誉。第一天发一千封只会被限速;从每天几十封开始,用两三周爬上去。
  • IPv6 发信有独立的一套声誉。域名在 IPv4 上历史清白,换到一个全新的 IPv6 地址,在那条路径上依然算新域名。
  • 多数 VPS 与云厂商默认封 25 端口。如果你打算在实例上发信,先开工单再动手写代码。

五、先查黑名单,再排查别处

把 IP 拿到 Spamhaus ZEN、Barracuda、AbuseIPDB 各查一遍,顺便查一下所在的 /24——不少名单是按整个网段运作的,因为发垃圾邮件的人很少只买一个地址。新上榜通常有移除表单,提交之后要去找出是什么在发信,因为只移除不修复,一周后还会回来。

ipbox.one 的 DNS 查询工具通过 DNS-over-HTTPS 查 A、AAAA、MX、TXT、NS,足够你在浏览器里直接把 SPF、DKIM selector 与 DMARC 记录读出来,一边对照上面的清单排查。

推荐阅读