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

Laravel新用户注册邮件动态获取邮箱地址错误问题

解决Laravel注册后发送邮件无法获取邮箱的问题

嘿,我一眼就瞅到你代码里的问题啦!你在Mail::send()的第二个参数里不小心覆盖了原来的$user模型实例,导致后面没法正确获取邮箱地址。

问题分析

你原来的代码里写了:

Mail::send('email.send', $user = ['name'=>$user['name'], 'surname'=>$user['surname'], 'email'=>$user['email']], function ($message) {
    // ...
});

这里的$user = [...]操作把原本的User模型实例直接替换成了普通数组,而且如果你的User模型没开启数组访问(比如没实现ArrayAccess接口),用$user['name']这种方式访问属性本身就会报错。更关键的是,闭包里如果想调用$user->email的话,此时$user已经是数组,自然拿不到邮箱。

修复后的代码

把变量名改一下,别覆盖原有的$user实例,同时用模型的属性访问方式(->)来获取字段:

protected function registered(Request $request, $user) {
    // 用新的变量传递邮件视图数据,保留原$user实例
    Mail::send('email.send', [
        'name' => $user->name,
        'surname' => $user->surname,
        'email' => $user->email
    ], function ($message) use ($user) {
        // 别忘了在闭包里use原$user实例,这样才能拿到正确的邮箱
        $message->to($user->email)
                ->subject('欢迎注册我们的平台!');
        // 这里可以继续添加其他邮件设置,比如发件人、回复地址等
    });
}

额外排查点

如果修复后还是拿不到邮箱,可以检查这几点:

  • 确认User模型的$fillable数组里包含email字段,确保注册时邮箱能被正确存入数据库:
    protected $fillable = ['name', 'surname', 'email', 'password'];
    
  • 检查注册表单是否正确提交了email字段,且$request里确实有这个值
  • 确认你的邮件配置(.env里的MAIL_*参数)是正确的,避免因为邮件配置问题导致的隐性错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:08