cPanel托管的Laravel项目Google SMTP无法连接问题
问题分析
本地环境SMTP运行正常,部署到cPanel后出现证书CN不匹配错误:
Connection could not be established with host "ssl://smtp.gmail.com:465": stream_socket_client(): Peer certificate CN=
server9.hostingbangladesh.com' did not match expected CN=smtp.gmail.com'
错误中显示连接使用的是ssl://smtp.gmail.com:465,但你的.env配置的是MAIL_PORT=587和MAIL_ENCRYPTION=tls,说明实际连接参数与配置不符,大概率是配置缓存未清除,或cPanel服务器存在SMTP拦截/代理机制。
解决步骤
清除Laravel配置缓存
登录cPanel终端,执行以下命令刷新配置:php artisan config:clear php artisan cache:clear php artisan config:cache部署后缓存会保留旧配置,必须清除才能加载新的
.env设置。检查cPanel托管商限制
部分托管商会强制拦截外部SMTP请求,或替换为自身邮件服务器,导致证书不匹配。联系托管商确认:- 是否开放587/465端口
- 是否允许使用第三方SMTP服务(如Gmail)
- 是否存在SSL证书代理或拦截机制
确认mail.php配置正确性
打开config/mail.php,确保smtp驱动的配置与.env一致:'smtp' => [ 'transport' => 'smtp', 'host' => env('MAIL_HOST', 'smtp.gmail.com'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => null, ],修改后再次执行缓存清除命令。
临时禁用证书验证(仅测试用)
如果托管商证书问题无法快速解决,可临时添加证书跳过验证(不推荐长期使用,存在安全风险):
在smtp配置中添加stream参数:'smtp' => [ // 原有配置... 'stream' => [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, ], ], ],测试正常后,务必联系托管商修复证书问题,恢复验证机制。
内容的提问来源于stack exchange,提问作者Abu Taher Muhammad

