Laravel自定义密码重置邮件模板出现Attempt to read property 'view' on null 500错误求助
解决Laravel密码重置通知的500错误:Attempt to read property "view" on null
这个错误的核心原因是你的ResetPasswordNotification类的toMail方法没有返回Laravel通知系统期望的对象——它需要返回一个MailMessage实例或者Mailable类的实例,而你现在直接调用了Mail::send(),这个方法的返回值不是通知系统能处理的类型,导致MailChannel在后续处理时试图读取null的view属性,从而抛出500错误。
修正步骤
1. 调整ResetPasswordNotification的toMail方法
把手动调用Mail::send()的逻辑改成返回你的ResetPasswordMail实例,让Laravel的通知系统负责邮件发送工作:
public function toMail($notifiable) { // 返回Mailable实例,而非直接调用send return (new ResetPasswordMail($this->url))->to($this->email); }
2. 确认User模型的通知触发逻辑
你的sendPasswordResetNotification方法逻辑是正确的,它负责触发通知,剩下的交给Laravel的通知系统处理即可:
public function sendPasswordResetNotification($token) { \Illuminate\Support\Facades\Log::info('sendPasswordResetNotification ran'); $url = $this->clientBaseUrl . '/reset-password/' . $token; $this->notify(new ResetPasswordNotification(request('email'), $url)); }
错误原因解析
Laravel的通知系统中,MailChannel会接收toMail方法返回的对象,自动完成邮件发送的后续流程。当你手动调用Mail::send()时,toMail方法实际返回的是send()的执行结果(通常是true或null),而非包含邮件视图配置的合法对象。MailChannel尝试读取这个返回值的view属性时,自然会遇到null,进而抛出错误。
修改后,邮件会正常发送,同时通知系统能完成完整流程,不会再出现500错误。
内容的提问来源于stack exchange,提问作者nikulas13
相关产品推荐
相关产品推荐

