WHM环境下Exim无法向Gmail/Hotmail发送邮件(连接问题)
WHM环境下Exim无法向Gmail/Hotmail发送邮件(连接问题)
看起来你遇到的核心问题是Exim没正确把出站邮件发去外部服务器,反而回环到localhost,同时服务器连不上外部SMTP端口——咱们一步步来排查解决:
一、先解决邮件回环到127.0.0.1的问题
这个问题几乎肯定是Exim的路由配置出了问题,导致它把外部邮件当成本地邮件处理了:
- 登录WHM,找到Exim Configuration Manager,切换到
Advanced Editor标签页 - 定位到
Router Configuration部分,重点找dnslookup路由——这是Exim处理外部邮件的核心路由,必须确保它的优先级高于任何会把邮件导去localhost的路由(比如localuser或者自定义的本地路由) - 检查
dnslookup的配置,正常的配置应该类似这样(没有错误的限制规则):
如果发现有自定义路由强行把外部邮件导向localhost,直接禁用它或者调整它的优先级(让dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_morednslookup排在前面)
二、排查出站SMTP端口连接失败的问题
你用telnet连不上Gmail/Hotmail的SMTP端口,结合DNS正常的情况,大概率是服务器的出站端口被限制了:
- 检查服务器本地防火墙:执行命令
iptables -L -n(如果用iptables)或者firewall-cmd --list-all(如果用firewalld),看看有没有规则阻止了出站的25、465、587端口。如果有,添加允许规则即可 - DigitalOcean的默认端口限制:DO对新创建的服务器默认会限制出站25端口(反垃圾邮件策略),你可以登录DigitalOcean控制台,查看你的服务器是否有这个限制,要是有的话,提交工单申请解除就行——这个是很多DO用户踩过的坑
- 用更详细的命令测试连接:试试
curl -v telnet://gmail-smtp-in.l.google.com:25,看返回的错误是超时还是拒绝:超时一般是防火墙/运营商限制,拒绝可能是对方的问题,但你多个邮箱都这样,基本是你这边的问题
三、检查Exim的传输配置
确保Remote SMTP传输没有强制走本地:
- 在Exim配置的
Transport Configuration里找到remote_smtp,检查有没有hosts = 127.0.0.1这类强制指向本地的设置,要是有,直接删掉 - 正常的
remote_smtp配置应该是这样的:remote_smtp: driver = smtp interface = <; ${if exists {/etc/mailips}{${lookup{$sender_address_domain}lsearch*{/etc/mailips}{$value}{}}}} helo_data = ${if exists {/etc/mailhelo}{${lookup{$sender_address_domain}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}{$primary_hostname}}
四、用Exim自带工具测试路由
- 执行
exim -bt user@gmail.com,这个命令会显示Exim打算用哪个路由发送到这个邮箱。如果输出显示用的是dnslookup路由,说明配置没问题;如果显示用的是本地路由,那还是路由优先级的问题 - 也可以手动发测试邮件看详细日志:
exim -v user@gmail.com < test_email.txt(先创建一个简单的test_email.txt内容),从输出里能清楚看到Exim是在尝试连接外部服务器还是localhost
补充说明
你提到GoDaddy的服务器正常,是因为它默认用了中继服务器dedrelay.secureserver.net,不需要直接连接外部SMTP端口;而你的DigitalOcean服务器是直接出站发送,所以必须确保端口能正常连接,同时Exim路由配置正确。
备注:内容来源于stack exchange,提问作者Thaer
相关产品推荐
相关产品推荐

