You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

谷歌拒收邮件排查:如何查看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 procmailapt 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的配置,让它记录完整的邮件头:

  1. 打开Sendmail的宏配置文件/etc/mail/sendmail.mc
  2. 添加以下配置项:
    FEATURE(`log_full_info')dnl
    
  3. 重新生成配置文件并重启Sendmail:
    m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
    systemctl restart sendmail
    

之后所有邮件的完整头信息都会被记录到日志里,方便后续排查。

拿到邮件头后,重点关注这几个字段:

  • Received:检查里面的IP和PTR记录是否匹配,是否显示了你的子域名foo.nyc.example.org
  • Message-ID:确认域名部分是否和你的子域名一致
  • 谷歌返回的SMTP错误码:比如550 5.7.1通常代表垃圾邮件判定,550 5.7.26可能和SPF/DKIM验证失败有关,这些错误码能帮你快速定位问题。

内容的提问来源于stack exchange,提问作者Dovid Bender

火山引擎 最新活动