Laravel Forge生产服务器配置Mailgun发信提示无法连接mailhog错误
排查解决步骤
清除并重建Laravel配置缓存
在项目根目录依次执行命令:php artisan config:clear php artisan config:cacheLaravel生产环境默认会启用配置缓存,修改.env后如果不更新缓存,会一直读取旧的配置值。
重启队列工作进程
从错误栈可以看到你的邮件是走队列异步发送的,队列进程启动时只会加载一次配置,后续修改配置后如果不重启队列,会一直沿用启动时的旧配置。执行命令重启队列:php artisan queue:restart如果你用Supervisor管理队列进程,也可以直接重启对应站点的队列进程组保证配置生效。
检查Laravel Forge面板的站点环境变量
Forge会为每个站点单独维护一套环境变量,部署时会用面板内的变量覆盖项目根目录的.env文件。登录Forge后台进入对应站点的「Environment」页面,检查所有MAIL_开头的配置项,确认MAIL_HOST等参数是否为正确的Mailgun配置,是否被误设为mailhog。校验CLI模式下的邮件配置
如果你之前是在web请求中输出配置校验,只能代表web环境的配置正确,队列运行在CLI模式下,两边的环境变量可能存在差异。在项目根目录执行命令查看CLI下的实际邮件配置:php artisan tinker --execute="print_r(config('mail'));"确认输出的host、driver等参数是否和你预期的Mailgun配置一致。
检查配置文件的条件逻辑
打开项目config/mail.php文件,检查是否存在针对环境的条件判断逻辑,比如是否误将生产环境的邮件配置指向了mailhog。排查高优先级环境变量
检查VPS系统级环境变量、PHP CLI/php-fpm的配置文件、站点的.htaccess文件中是否有设置MAIL_HOST为mailhog的参数,这类配置的优先级高于项目.env文件,会覆盖项目内的配置。
内容的提问来源于stack exchange,提问作者D3V1L

