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

Laravel 8 实现ShouldQueue后队列发送邮件通知提示缺少发件人地址报错

问题原因与解决方案

这个问题90%以上的场景都是队列进程的配置缓存未更新导致的,队列进程是常驻内存运行的,和web请求每次重新加载所有配置的逻辑完全不同,具体解决步骤按优先级排列如下:

  • 重启队列工作进程
    你在配置调整后没有重启队列进程,进程内部缓存的还是旧的发件人配置为空的状态。执行以下命令重启队列即可:
    php artisan queue:restart
    
    如果你使用supervisor等工具托管队列进程,也可以直接重启对应的supervisor进程组生效。
  • 重新生成配置缓存
    如果你执行过php artisan config:cache开启了配置缓存,队列进程会优先读取缓存的配置文件而非实时读取.env取值。先清空旧缓存再生成新缓存即可:
    php artisan config:clear
    php artisan config:cache
    
    操作完成后记得再执行一次队列重启命令。
  • 验证队列环境的配置取值
    部分特殊场景下CLI运行的队列进程和web请求加载的.env文件不是同一个,你可以在通知的toMail方法中加入日志输出,确认队列实际读取到的配置:
    public function toMail($notifiable)
    {
        \Log::info('mail.from配置', config('mail.from'));
        return (new MailMessage)
            ->from('address@domain.com')
            ->line('The introduction to the notification.')
            ->action('Notification Action', url('/'))
            ->line('Thank you for using our application!');
    }
    
    执行队列任务后查看日志,如果输出的发件人地址为空,说明队列进程加载的配置文件确实没有正确读取到发件人配置,你可以直接在config/mail.php中硬编码from的取值测试,修改后重复上面的清缓存、重启队列步骤即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:45:02