Laravel 8 线上服务器密码重置邮件通知功能失效如何修复
问题修复方案
错误核心原因是线上程序仍在尝试调用本地开发常用的mailhog邮件测试服务,线上环境不存在该服务,按以下步骤依次排查修复:
1. 清除Laravel配置缓存
Laravel部署到线上后如果开启了配置缓存,修改.env文件不会实时生效,需要手动清空并重建缓存:
在项目根目录执行以下命令:
php artisan config:clear php artisan config:cache
如果你使用的是无法执行命令的虚拟主机,可手动删除项目根目录下
bootstrap/cache/config.php文件,效果等同于清空配置缓存。
配置校验(可选)
清空缓存后可以临时添加一个测试路由,确认当前读取的邮件配置是否正确,测试完成后记得删除该路由:
// routes/web.php 新增 Route::get('/test-mail-config', function () { dd(config('mail')); });
访问该路由查看mailers.smtp.host字段值,如果已经和你.env中配置的SMTP地址一致,即可直接测试邮件发送功能。
2. 检查邮件配置文件是否被硬编码
如果清空缓存后配置还是读取mailhog,检查config/mail.php文件内的配置项,是否有硬编码写死邮件主机的情况:
默认的config/mail.php中SMTP配置应该从.env读取,对应内容如下:
'mailers' => [ '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, ], // 其余邮件驱动配置 ],
如果发现host字段被硬编码为mailhog,修改为上述从.env读取的形式即可。
3. 校验服务器端口连通性
确认配置正确后如果仍有连接报错,检查线上服务器出站端口是否被防火墙拦截:
- 用Gmail SMTP的检查587端口是否放行
- 用Mailtrap的检查2525端口是否放行
可在服务器执行命令测试连通性:
# 测试Gmail连通性 telnet smtp.gmail.com 587 # 测试Mailtrap连通性 telnet smtp.mailtrap.io 2525
如果连接超时,需要联系服务器运营商放行对应出站端口。
额外注意事项
如果使用Gmail作为发件服务,需要提前开启账号的「不太安全的应用访问权限」,或者配置Google应用专用密码,否则会被谷歌官方拦截发件请求。
内容的提问来源于stack exchange,提问作者Mahdi Jafari
相关产品推荐
相关产品推荐

