You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS+VestaCP环境下仅收信正常发信失败问题求助

排查VestaCP环境下邮件发送失败的方案

我之前维护VestaCP服务器时碰到过几乎一模一样的邮件故障,结合你已经做的排查(查黑名单、关闭IPv6/SpamAssassin/Clamd),给你几个更针对性的排查方向:

1. 先抓Exim的详细错误日志

邮件问题的核心线索全在日志里,Roundcube显示的模糊退信信息没用,直接看Exim的主日志:

  • 实时查看日志(路径可能因系统略有不同):tail -f /var/log/exim/main.log
  • 同时用Roundcube发一封测试邮件,盯着日志输出,里面会有具体的错误码(比如550 5.7.1这类)和拒绝原因,比如“PTR record missing”或者“SPF check failed”,这能直接定位问题。

2. 验证邮件基础DNS配置(Gmail必查)

Gmail对邮件的DNS合规性要求极高,这是最常见的拒信原因:

  • 反向解析(PTR):执行dig -x 你的服务器公网IP,返回的域名必须和你发信的邮箱域名(比如@yourdomain.com)一致,如果是VPS默认的主机名(比如vpsXXXX.hosting.com),大概率会被拒,需要联系服务商设置正确的PTR记录。
  • SPF记录:检查你域名的SPF配置,执行nslookup -type=TXT yourdomain.com,确保记录里包含你的服务器IP,比如v=spf1 ip4:1.2.3.4 -all(-all表示严格匹配,建议用这个)。

3. 用Exim命令行直接测试发信,排除应用层问题

绕过PHP/WordPress/Roundcube,直接用Exim发信,确认是服务本身的问题还是应用配置问题:

echo "Subject: Test Exim Mail
This is a test email from Exim command line." | exim -v yourtest@gmail.com

-v参数会输出完整的发信流程,比如是否能连接到Gmail的SMTP服务器,是否被拒绝,拒绝的具体原因。

4. 检查PHP mail()的配置

如果PHP mail()也失效,确认php.ini里的sendmail路径是否正确:

  • 查看当前配置:php -i | grep sendmail_path
  • 正确的路径应该指向Exim的执行文件,比如/usr/sbin/exim -t -i,如果不对,修改php.ini后重启PHP服务(systemctl restart php-fpm)。

5. 检查服务器端口25是否被封禁

很多VPS服务商默认会封禁出站25端口(防垃圾邮件),这会导致无法直接发送邮件:

  • 测试端口连通性:telnet gmail-smtp-in.l.google.com 25
  • 如果连接失败,联系服务商解封25端口,或者配置Exim使用587端口作为提交端口(需要在Exim配置里开启587端口的监听,并设置验证)。

6. 排查Gmail内部信誉问题

如果以上配置都没问题,可能你的IP被Gmail的内部信誉系统标记了:

  • 这时候可以通过Gmail的邮件投递申诉渠道提交IP审核(前提是你没有发送过垃圾邮件,服务器也没有被滥用),提交时需要提供你的服务器IP和域名信息。

内容的提问来源于stack exchange,提问作者Piotrek Zatorski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:04:02