Laravel邮件发送报错:调用未定义方法Illuminate\Mail\PendingMail::sent()
解决Laravel邮件发送报错:
PendingMail::sent()方法未定义 嘿,一眼就瞅出问题所在了——你调用了一个Laravel邮件系统里根本不存在的方法!Illuminate\Mail\PendingMail类没有sent()这个方法,正确的发送方法是send()。
第一步:修正UserController里的核心错误
把你原来的代码:
Mail::to($user->email)->sent(new VarificationEmail($user));
直接改成:
Mail::to($user->email)->send(new VarificationEmail($user));
(顺带提一句:你拼写的VarificationEmail应该是VerificationEmail,虽然这不是当前报错的原因,但建议修正拼写,避免后续出现类找不到的问题)
第二步:确认邮件类(你的MailController)的正确性
看起来你把邮件类命名成了MailController?其实Laravel里发送邮件的类应该是继承Mailable的邮件类,比如VerificationEmail,不过你的代码逻辑本身没大问题,只是有几个细节要注意:
- 确保类文件的命名和类名一致(比如
VerificationEmail.php放在app/Mail目录下) - 确认
Email.verification视图存在于resources/views/Email/verification.blade.php路径 - 保证传入的
$user对象确实有uname和email_verification_token这两个属性
给你一个标准的邮件类示例(修正拼写后):
namespace App\Mail; use App\Models\User; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class VerificationEmail extends Mailable { use Queueable, SerializesModels; public $user; public function __construct(User $user) { $this->user = $user; } public function build() { return $this->view('Email.verification') ->with([ 'uname' => $this->user->uname, 'token' => $this->user->email_verification_token, ]) ->bcc('pmsaidur@gmail.com') ->subject('Test'); } }
额外小提示
如果你是想在邮件发送完成后做一些操作,别想着用不存在的sent()方法,可以监听Laravel自带的MessageSent事件,在事件监听器里处理后续逻辑哦。
内容的提问来源于stack exchange,提问作者pksaidur
相关产品推荐
相关产品推荐

