发邮件给别人被退信「554 5.7.1」,MXToolbox 检测显示「Reverse DNS does not match SMTP Banner」,怎么修复?
收件方 MTA 建立 SMTP 连接时的三步验证:(1) 你的 IP 连接过来 → 查 PTR 记录(反向 DNS)→ 得到主机名(如 mail.yourdomain.com);(2) 正向查该主机名的 A 记录 → 确认指向你的 IP(正反向 DNS 闭环);(3) 你的 SMTP 服务器在 220 响应的 Banner 中自报的主机名也要与 PTR 解析出的主机名一致。这三步任一不一致,都可能被判定为「你的 IP 是谁都说不清楚,可能是垃圾邮件发件源」。
MXToolbox 的 SMTP Test 显示 Reverse DNS does not match SMTP Banner 就是第三步——你的 SMTP 服务器说的主机名跟 PTR 记录指向的域名不一致。
Step 1:检查当前 PTR 记录nslookup 你的发信IP → 记下返回的域名(如 mail.hostprovider.com)。
Step 2:检查当前 SMTP Bannertelnet 你的发信主机名 25 或 openssl s_client -connect 你的主机:25 -starttls smtp → 看 220 后面跟的主机名(如 220 mail.yourdomain.com ESMTP Postfix)→ 记下来。
Step 3:对齐两种方案
方案 A(推荐):修改 SMTP Banner 主机名以匹配 PTR → Postfix:/etc/postfix/main.cf 中设 myhostname = 与PTR一致的域名 → systemctl reload postfix。
方案 B:修改 PTR 以匹配 Banner → 联系云服务商/ISP 将 IP 的 PTR 改为你的 SMTP Banner 主机名。
Step 4:验证对齐
去 MXToolbox → SMTP Test → 输入你的发信域名 → 看 SMTP Banner Check 和 Reverse DNS 项都显示绿色 √。
/etc/postfix/main.cf:myhostname = mail.yourdomain.com ← 这个值会在 Banner 中显示mydomain = yourdomain.comsmtpd_banner = \$myhostname ESMTP ← 使用系统主机名作为 Banner
验证:postconf -n | grep -E "myhostname|smtpd_banner"。Exim:primary_hostname = mail.yourdomain.com。
注意:有些反垃圾系统还会检查 Banner 中的主机名和 HELO/EHLO 是否一致——如果邮件客户端用 EHLO laptop.local,Fix 方法见 FAQ 第78题(HELO/EHLO 主机名不匹配)。
参考:RFC 5321 §4.3.1(SMTP 验证序列)· RFC 1912 §2.1(PTR 最佳实践)· Postfix smtpd_banner 文档
