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

Laravel使用Gmail发送用户注册欢迎邮件无法收到问题求助

Laravel Gmail发信失败排查方案

一、优先修复代码语法错误

现有代码中Mail发信的闭包没有引入外部$data变量,会直接触发Undefined variable $data报错,无法读取收件人邮箱地址,修正后的代码如下:

protected function create(array $data)
{
    $user = User::create([
        'username' => $data['username'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);

    // 闭包增加use($data)引入外部变量
    Mail::send('layouts.WelcomeEmailNotification', $data, function($message) use ($data)
    {
        $message->from('noreply.rewardsystem@gmail.com', 'Laravel');
        $message->to($data['email']);
    });

    return $user;
}

二、核对.env邮件配置项

确保项目根目录.env文件的邮件配置完全符合Gmail SMTP要求:

  • MAIL_MAILER=smtp
  • MAIL_HOST=smtp.gmail.com
  • MAIL_PORT=587
  • MAIL_USERNAME=noreply.rewardsystem@gmail.com
  • MAIL_PASSWORD=你生成的Gmail应用专用密码
  • MAIL_ENCRYPTION=tls
  • MAIL_FROM_ADDRESS=noreply.rewardsystem@gmail.com
  • MAIL_FROM_NAME="${APP_NAME}"

不要填写Gmail账号的原始登录密码,必须使用应用专用密码才有权限调用SMTP服务

三、检查Gmail账号权限设置

  • 必须先为发件邮箱开启两步验证,否则谷歌已禁止第三方应用调用SMTP发信
  • 开启两步验证后,进入谷歌账号「安全」板块找到「应用密码」入口,生成一个专用密码,填入.env的MAIL_PASSWORD字段
  • 登录发件邮箱查看安全通知,确认没有拦截本次发信的风险请求记录

四、其他问题排查

  • 查看storage/logs目录下的Laravel运行日志,查找发信相关的报错信息,可直接定位具体问题
  • 让收件人检查邮箱的垃圾箱、推广箱等分类,避免邮件被反垃圾规则拦截
  • 先写固定收件地址的测试发信逻辑,排除动态变量取值错误的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:04