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

Laravel使用Mail::later发延迟邮件提示Mailable类userdata属性未定义

问题原因

使用later方法发送邮件时,Laravel会对Mailable类执行序列化/反序列化操作存入队列,你的DueReminder类没有显式声明$userdata公共属性。同步调用send方法时不需要序列化,PHP支持动态给对象赋值,所以不会报错;但队列序列化只会保留类中显式声明的属性,反序列化后动态赋值的属性会丢失,因此触发未定义属性的报错。

解决方案

在DueReminder类顶部显式声明公共的$userdata属性即可,修正后的代码如下:

class DueReminder extends Mailable
{
    use Queueable, SerializesModels;

    // 新增此行,显式声明公共属性
    public $userdata;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($dat)
    {
        $this->userdata = $dat;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('test@gmail.com', 'Test')
            ->subject('Test: Testing')
            ->view('email.sendReminder',['data1' => $this->userdata]);
    }
}

修改后重启队列服务即可正常运行,如果你传入的$dat是Eloquent模型/集合实例,SerializesModels trait会自动完成正确序列化,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03