Laravel 8 实现ShouldQueue后队列发送邮件通知提示缺少发件人地址报错
问题原因与解决方案
这个问题90%以上的场景都是队列进程的配置缓存未更新导致的,队列进程是常驻内存运行的,和web请求每次重新加载所有配置的逻辑完全不同,具体解决步骤按优先级排列如下:
- 重启队列工作进程
你在配置调整后没有重启队列进程,进程内部缓存的还是旧的发件人配置为空的状态。执行以下命令重启队列即可:
如果你使用supervisor等工具托管队列进程,也可以直接重启对应的supervisor进程组生效。php artisan queue:restart - 重新生成配置缓存
如果你执行过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
相关产品推荐
相关产品推荐

