使用Laravel Jobs发送邮件时仅单封成功另一封无法发送怎么解决
问题排查及解决方案
核心错误修复
- Job类handle方法变量调用错误
你代码中val=1的分支判断使用了未定义的局部变量$val,无法正确读取Job类的属性,导致该分支永远不会触发,这是第二封邮件无法发送的核心原因。修正后代码如下:
// job 修改后代码 public function handle() { if ($this->val == 0){ Mail::to($this->email)->send( new orderMail( $this->mailBody, 0) ); } // 原代码这里写的$val,改为$this->val elseif ($this->val == 1){ Mail::to($this->email)->send( new orderMail( $this->mailBody, 1) ); } }
逻辑补全
- 控制器缺少第二封邮件的任务调度
你当前控制器仅调度了val=0的邮件任务,要发送两封通知需要额外调度一次val=1的任务,如果第二封是商家通知,记得将收件人替换为商家邮箱:
// controller 修改后代码 public function saveData(Request $request){ // 发给用户的订单通知 SendEmailJob::dispatch($mailBody, 0, $request->email); // 发给商家的销售通知,最后一个参数替换为实际商家邮箱 SendEmailJob::dispatch($mailBody, 1, 'sale@yourdomain.com'); }
其他校验点
- 确认
SendEmailJob的构造函数已经正确将传入的$mailBody、$val、$email三个参数赋值给类的公共属性 - 确认
orderMailMailable类的构造函数已经正确接收$mailBody和$val两个参数,并赋值给类的对应属性 - 修改Job代码后必须重启队列进程才能生效,执行命令
php artisan queue:restart - 若修正后仍有异常,查看
storage/logs/laravel.log中的报错信息,可快速定位是否是邮件模板不存在、发件人配置错误等问题
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

