You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用Mailgun发送邮件报错:Serialization of 'Closure' is not allowed

解决Laravel中Mailgun发送邮件时的"Serialization of 'Closure' is not allowed"错误

问题原因

这个错误是因为你在邮件闭包中直接引用了$user对象,而该对象内部包含了无法被序列化的闭包(匿名函数)类型属性——即使你没显式使用队列,Laravel在处理邮件发送的某些环节仍会尝试序列化相关对象,从而触发这个错误。

解决方案

方案1:仅传递所需属性而非整个对象

避免传递完整的$user对象,只提取闭包需要的属性(比如邮箱),这样就不会触发对整个对象的序列化:

$details = [
    'email' => $request->email,
    'password' => $request->password,
];

// 单独提取需要的属性
$userEmail = $user->email;

Mail::send('emails.welcome', $details, function ($message) use ($userEmail) {
    $message->from('admin@mywebsite.tv', 'Admin');
    $message->to($userEmail);
});

方案2:确认邮件驱动为同步模式

检查是否无意中开启了邮件队列,确保邮件驱动是sync(即时发送,不进入队列):

在.env文件中设置:

MAIL_MAILER=sync

方案3:清理对象中的闭包属性(若必须传递整个对象)

如果业务需要传递完整的$user对象,先检查模型中是否存在闭包类型的自定义属性或访问器,手动移除这些属性后再传递:

// 假设$user有一个包含闭包的属性$customCallback
unset($user->customCallback);

Mail::send('emails.welcome', $details, function ($message) use ($user) {
    $message->from('admin@mywebsite.tv', 'Admin');
    $message->to($user->email);
});

内容的提问来源于stack exchange,提问作者Noman Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:05:15