Laravel项目发送邮件报错:Method Illuminate\Mail\Mailer::failures不存在
解决Laravel中
Method Illuminate\Mail\Mailer::failures does not exist报错 这个报错是因为Laravel 9及以上版本移除了Mail facade上的静态failures()方法,该方法被移到了邮件发送后返回的SentMessage实例中。
问题原因
在Laravel 8及更早版本中,可直接通过Mail::failures()获取发送失败的收件人列表,但从Laravel 9开始,邮件组件重构,这个静态方法被移除,必须从发送邮件返回的实例上调用failures()。
修复代码
先执行邮件发送并获取返回的SentMessage实例,再通过该实例调用failures():
// 替换为你的实际邮件发送逻辑,比如发送指定Mailable $sentMessage = Mail::to($targetEmail)->send(new YourCustomMailable()); // 从实例中获取失败的收件人列表 if (!empty($sentMessage->failures())) { $res_data = [ 'msg' => __('Mail Send Failed'), 'type' => 'danger' ]; } return redirect()->back()->with($res_data);
注意事项
- 如果使用队列发送邮件(
Mail::queue()或Mail::later()),无法直接通过failures()获取结果,因为队列是异步执行的,需通过失败队列监控或日志排查问题。 - 确保你的Mailable类定义正确,且邮件配置(如SMTP信息)无误,这也是邮件发送失败的常见诱因。
内容的提问来源于stack exchange,提问作者Musaf Hanif
相关产品推荐
相关产品推荐

