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
相关产品推荐
相关产品推荐

