Laravel 8使用Gmail发邮件部署到Heroku后出现SMTP认证错误如何解决?
错误码534是Gmail的安全策略拦截导致的认证失败,本地运行正常是因为你的本地IP属于Gmail信任的常用登录IP,Heroku的动态IP未被信任,同时普通账号密码已不支持第三方SMTP登录。
解决方案
- 第一步:配置Gmail应用专用密码
首先为你的Gmail账号开启两步验证,之后在谷歌账号安全设置中生成16位的应用专用密码,替换.env中MAIL_PASSWORD的原有值。 - 第二步:核对Heroku环境变量
登录Heroku控制台,进入对应项目的Settings > Config Vars,确认所有MAIL_开头的配置项和你本地生效的配置完全一致,尤其是MAIL_PASSWORD要填写刚生成的应用专用密码,Heroku的配置变量优先级高于项目根目录的.env文件。 - 第三步:修正发件人逻辑
Gmail SMTP不允许使用未认证的第三方邮箱作为发件人,你当前控制器代码中直接用用户提交的邮箱作为发件人会触发校验拦截,修改代码如下:Mail::send('email', array( 'name' => $request->name, 'email' => $request->email, 'phone' => $request->phone_number, 'gender' => $request->gender, 'institute' => $request->institute ), function($message) use ($request){ // 发件人必须是你认证的Gmail账号 $message->from(env('MAIL_FROM_ADDRESS'), $request->name); // 新增replyTo设置,用户回复时会直接发送到用户提交的邮箱 $message->replyTo($request->email, $request->name); $message->to('mail@gmail.com')->subject($request->get('Apply Form')); }); - 可选排查:如果修改后仍报错,登录Gmail账号的安全中心,找到近期的异常登录拦截提醒,手动放行对应访问请求即可。
内容的提问来源于stack exchange,提问作者kamran
相关产品推荐
相关产品推荐

