新手首次使用Sendmail遇邮件未送达:连接超时问题求助
排查Sendmail邮件无法送达(无退信、未进垃圾邮件)的问题
嘿,我来帮你搞定这个Sendmail邮件发不出去的问题!从你给出的信息来看,stat=Deferred: Connection timed out with alt4.gmail-smtp-in.l.google.com 大概率就是核心问题所在,咱们一步步拆解排查:
一、先确认Sendmail的基础运行状态
你已经用netstat -tuplen | grep 25确认了25端口开放,再结合netstat -ntlp | grep sendmail的输出,先确保Sendmail进程是监听在公共IP(比如0.0.0.0:25或者:::25)上,而不是只绑定127.0.0.1——如果只监听本地,那只能发内部邮件,往外发肯定不行。
二、深挖连接超时的原因
连接Gmail的SMTP服务器超时,常见的坑有这几个:
- ISP封禁了出站25端口:很多运营商为了防垃圾邮件,会默认封掉普通用户的25端口。你可以用telnet直接测连通性:
如果连不上(超时或者直接被拒),那基本就是ISP的锅。这种情况要么找运营商解封,要么改用SMTP中继(比如用Gmail自己的587/465端口,需要给Sendmail配置认证信息)。telnet alt4.gmail-smtp-in.l.google.com 25 - DNS解析出问题:Sendmail发邮件得先解析对方的MX记录,你手动测一下Gmail的MX记录看看:
如果解析不到正常的记录(比如alt4.gmail-smtp-in.l.google.com这类),那得检查你的dig gmail.com MX/etc/resolv.conf里的DNS服务器是不是配置错了。 - 防火墙/安全组拦了出站流量:本地防火墙(比如ufw、iptables)或者云服务器的安全组,有没有禁止25端口的出站连接?你可以临时关防火墙测一下,或者查规则:
# 用ufw的话看状态 ufw status # iptables的话查规则 iptables -L -n | grep 25 - 邮件队列里藏着细节:看看mqueue目录里的待发邮件,用
mailq命令能看到队列状态,再手动触发投递看详细日志:
这里的详细输出能帮你找到更具体的报错。mailq sendmail -v -q
三、容易忽略的隐性问题
- 反向DNS(PTR记录)缺失:Gmail这类大厂对发件服务器的PTR记录要求很高,如果你的服务器IP没有对应的PTR记录,邮件可能直接被丢弃,连退信都不给。你查一下自己IP的PTR:
要是没结果,得找主机提供商帮你设置。dig -x 你的服务器公网IP - 邮件认证记录没配置:SPF、DKIM、DMARC这些记录如果没弄,Gmail可能直接把邮件丢进黑洞(而不是垃圾邮件)。先给域名加个SPF记录,把你的服务器IP包含进去,有条件再配DKIM和DMARC。
四、一步步测试的建议
- 先用telnet测Gmail的25端口连通性,确认网络通路;
- 跑
mailq看队列,再用sendmail -v -q手动投递,盯着输出看细节; - 检查DNS解析和反向PTR记录是否正常;
- 排查防火墙和ISP的端口封禁问题;
- 要是ISP确实封了25端口,就配置SMTP中继(比如用Gmail的SMTP,记得开应用密码,别用普通密码)。
要是按上面的步骤排查完还是有问题,把sendmail -v -q的详细输出、mailq的结果贴出来,咱们再精准定位!
内容的提问来源于stack exchange,提问作者jotyhista
相关产品推荐
相关产品推荐

