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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 05:03:04