Laravel部署服务器后Gmail发件报错535:用户名密码不被接受
解决Laravel部署后Gmail SMTP 535凭证错误的问题
嘿,这个问题我之前也踩过坑!本地跑联系页邮件功能完全正常,一上线就报535用户名密码不通过,大概率是Gmail的安全机制或者线上环境的配置缓存搞的鬼,给你几个靠谱的解决步骤:
1. 改用Gmail应用密码(核心解决办法)
现在Gmail已经禁止直接使用账户密码作为SMTP登录凭证了,必须先开启两步验证,再生成专属的「应用密码」:
- 登录你的
app@gmail.com账户,进入安全设置页面 - 先开启「两步验证」(如果还没开启的话)
- 找到「应用密码」选项,生成一个专门用于Laravel应用的密码(这个密码是16位无空格的字符串)
- 把生成的应用密码替换掉
.env里的MAIL_PASSWORD值,别再用原来的账户密码了!
2. 清除Laravel配置缓存
线上服务器会自动缓存.env的配置内容,哪怕你修改了.env,应用可能还是在读取旧的缓存值,一定要执行以下命令清除缓存:
php artisan config:clear php artisan cache:clear php artisan config:cache
执行完后最好重启一下你的应用服务(比如Nginx、PHP-FPM),确保新配置生效。
3. 核对.env配置细节
再仔细检查一遍你的配置,别犯低级错误:
- 确认
MAIL_USERNAME是完整的邮箱地址:app@gmail.com,没有拼写错误 - 确认
MAIL_PASSWORD是刚才生成的应用密码,没有多余的空格、换行或者拼写错误 - 检查
MAIL_ENCRYPTION=tls、MAIL_PORT=587、MAIL_HOST=smtp.gmail.com这些配置都是正确的(587端口对应tls加密,465端口对应ssl,别搞混)
4. 检查服务器防火墙/安全组
有些线上服务器的防火墙或安全组会默认阻止出站的SMTP连接,要确保你的服务器允许访问smtp.gmail.com的587端口,不然连Gmail服务器都连不上,肯定会报错。
5. 快速测试邮件配置
可以写个简单的测试路由来验证配置是否生效:
Route::get('/test-mail', function () { try { \Illuminate\Support\Facades\Mail::raw('这是Laravel发送的测试邮件', function ($message) { $message->to('你的测试邮箱@example.com') ->subject('Laravel邮件测试'); }); return '邮件发送成功!'; } catch (\Exception $e) { return '发送失败:'.$e->getMessage(); } });
部署后访问这个路由,能快速定位问题到底出在哪。
内容的提问来源于stack exchange,提问作者Jagdeesh Kumar
相关产品推荐
相关产品推荐

