谷歌拒收邮件排查:如何查看sendmail发往谷歌的邮件头信息
排查Sendmail发往谷歌邮件头的实用方法
针对你遇到的谷歌拒收邮件的问题,既然已经确认PTR和A记录配置正确,那查看完整的邮件头确实是排查子域名相关问题的关键。下面分享几个实操性强的方法:
1. 查看Sendmail系统日志
Sendmail会把邮件传输的所有细节(包括邮件头)记录到系统日志中,不同发行版的日志路径略有区别:
- RHEL/CentOS系列:
/var/log/maillog - Debian/Ubuntu系列:
/var/log/mail.log
你可以用grep过滤和谷歌相关的日志条目,快速定位目标邮件:
grep -i "gmail\|google.com" /var/log/maillog
找到对应邮件的Message-ID或队列ID后,再搜索该ID就能看到完整的邮件头信息,包括谷歌服务器返回的SMTP响应(这往往能直接告诉你拒收的原因)。
2. 用Sendmail调试模式发送测试邮件
直接通过调试模式手动发送测试邮件,能实时看到邮件头和SMTP交互的全过程,非常直观:
sendmail -v -d8.20 your-test-recipient@gmail.com
-v:开启 verbose模式,显示详细的SMTP对话-d8.20:强制输出完整的邮件头内容
执行命令后,按照提示输入邮件的主题、内容,最后按Ctrl+D结束发送。整个过程中你能清楚看到Sendmail发送的邮件头字段,以及谷歌服务器的反馈。
3. 提取邮件队列中待发邮件的头信息
如果邮件还卡在Sendmail队列里没发出去,先通过mailq查看队列状态,找到目标邮件的队列ID:
mailq
然后用formail工具提取该邮件的关键头字段(需要先安装procmail包,比如yum install procmail或apt install procmail):
cat /var/spool/mqueue/<队列ID对应的文件名> | formail -x "From:" -x "To:" -x "Subject:" -x "Message-ID:" -x "Received:" -x "Return-Path:"
这样就能快速获取邮件头的核心信息,不用查看整个邮件内容。
4. 配置Sendmail记录更完整的邮件头
如果默认日志里的信息不够详细,可以修改Sendmail的配置,让它记录完整的邮件头:
- 打开Sendmail的宏配置文件
/etc/mail/sendmail.mc - 添加以下配置项:
FEATURE(`log_full_info')dnl - 重新生成配置文件并重启Sendmail:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf systemctl restart sendmail
之后所有邮件的完整头信息都会被记录到日志里,方便后续排查。
拿到邮件头后,重点关注这几个字段:
Received:检查里面的IP和PTR记录是否匹配,是否显示了你的子域名foo.nyc.example.orgMessage-ID:确认域名部分是否和你的子域名一致- 谷歌返回的SMTP错误码:比如
550 5.7.1通常代表垃圾邮件判定,550 5.7.26可能和SPF/DKIM验证失败有关,这些错误码能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Dovid Bender




