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

Laravel项目上线后无法发送邮件:SMTP证书CN不匹配问题求助

解决Laravel上线后SMTP邮件证书不匹配问题

这个问题我之前帮不少开发者排查过,本质是你的服务器在请求Google SMTP时拿到的证书不对——不是Google的smtp.googlemail.com证书,而是你自己服务器whm001.smart1marketing.com的证书,这说明网络层面肯定有拦截或者配置问题,咱们一步步来解决:

1. 先排查DNS解析是否正常

首先登录你的服务器,执行以下命令检查smtp.googlemail.com的解析结果:

dig smtp.googlemail.com

或者用nslookup:

nslookup smtp.googlemail.com

如果解析出来的IP不是Google官方的SMTP服务器IP(比如显示成你自己服务器的IP或者其他陌生IP),那就是DNS解析出问题了。解决办法是把服务器的DNS换成公共DNS,比如Google的8.8.8.8或者Cloudflare的1.1.1.1,具体操作根据你的主机面板(比如WHM/cPanel)或者服务器系统调整。

2. 更换SMTP端口和加密方式试试

本地用465+SSL正常,但上线后可能被主机商拦截,试试改用587端口+TLS加密,修改你的.env配置:

MAIL_PORT=587
MAIL_ENCRYPTION=tls

改完后一定要清除Laravel缓存:

php artisan config:clear
php artisan cache:clear

很多时候587端口的TLS连接不会被拦截,能绕过这个证书问题。

3. 检查服务器是否有SMTP拦截/代理服务

如果你的服务器用的是WHM/cPanel这类主机面板,可能开启了SMTP Restrictions或者类似的邮件中继服务,强制把出站SMTP流量转向本地服务器,导致证书不匹配。你可以在主机面板里查找相关设置,暂时关闭后测试是否正常。另外,也可能是服务器上的防火墙、安全插件(比如ModSecurity)拦截了出站SMTP请求,需要检查相关规则。

4. 临时测试:跳过证书验证(不推荐正式环境使用)

如果上面的方法都不行,可以临时添加配置跳过证书验证,确认是不是证书验证的问题。修改config/mail.php里的smtp配置数组,加入stream参数:

'smtp' => [
    'transport' => 'smtp',
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
    'port' => env('MAIL_PORT', 587),
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'timeout' => null,
    'auth_mode' => null,
    // 添加这一段
    'stream' => [
        'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ],
],

⚠️ 注意:这个方法只是用来测试,正式环境绝对不能用,因为会跳过证书验证,导致你的邮件数据有被窃听的风险。

5. 联系主机商确认限制

如果以上都没解决,大概率是主机商封锁了Google SMTP的出站连接(不少主机商为了防止垃圾邮件会这么做),直接联系主机商的技术支持,询问是否限制了smtp.googlemail.com的465/587端口,或者是否需要特殊配置才能使用外部SMTP服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:12:28