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=smtpMAIL_HOST=smtp.gmail.comMAIL_PORT=587MAIL_USERNAME=noreply.rewardsystem@gmail.comMAIL_PASSWORD=你生成的Gmail应用专用密码MAIL_ENCRYPTION=tlsMAIL_FROM_ADDRESS=noreply.rewardsystem@gmail.comMAIL_FROM_NAME="${APP_NAME}"
不要填写Gmail账号的原始登录密码,必须使用应用专用密码才有权限调用SMTP服务
三、检查Gmail账号权限设置
- 必须先为发件邮箱开启两步验证,否则谷歌已禁止第三方应用调用SMTP发信
- 开启两步验证后,进入谷歌账号「安全」板块找到「应用密码」入口,生成一个专用密码,填入
.env的MAIL_PASSWORD字段 - 登录发件邮箱查看安全通知,确认没有拦截本次发信的风险请求记录
四、其他问题排查
- 查看
storage/logs目录下的Laravel运行日志,查找发信相关的报错信息,可直接定位具体问题 - 让收件人检查邮箱的垃圾箱、推广箱等分类,避免邮件被反垃圾规则拦截
- 先写固定收件地址的测试发信逻辑,排除动态变量取值错误的问题
内容的提问来源于stack exchange,提问作者fatihah afiqah
相关产品推荐
相关产品推荐

