Laravel 5.2无法连接smtp.gmail.com问题求助
解决Laravel 5.2 + Ubuntu 16.04 无法连接Gmail SMTP的问题
嘿,我来帮你排查这个邮件发送的问题!看了你的配置和错误提示,大概率是配置细节或者Gmail的权限设置出了问题,咱们一步步来解决:
1. 先修复mail.php里的明显错误
你的mail.php中读取SMTP用户名和密码的方式不对,env()函数的参数应该是你在.env里定义的变量名,而不是直接写邮箱或密码:
// 错误写法 'username' => env('email@gmail.com'), 'password' => env('***'), // 改成正确的写法 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'),
2. 修正.env的格式问题
你的.env里所有配置挤在一行,Laravel可能没法正确解析每个变量,把它们拆成单独一行:
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=email@gmail.com MAIL_PASSWORD=你的应用专用密码(不是普通登录密码!) MAIL_ENCRYPTION=tls
3. 搞定Gmail的SMTP权限(关键!)
现在Google对SMTP登录管得很严,普通密码根本用不了,必须这么做:
- 先给你的Google账号开启两步验证:登录账号后去「安全设置」里找到两步验证,按照提示开启
- 生成应用专用密码:在两步验证的设置页面,找到「应用专用密码」,选择「邮件」作为应用类型,设备选「其他」,生成一个16位的密码,把这个密码填到
.env的MAIL_PASSWORD里
划重点:没有开启两步验证的话,Google会直接拒绝SMTP连接请求,这是现在的强制要求
4. 检查Ubuntu服务器的网络和防火墙
- 先测试服务器能不能连到Gmail的SMTP端口:
在服务器上执行这个命令:
如果连接失败,说明要么是服务器的防火墙(比如ufw)封了587端口,要么是云服务商的安全组没开放这个端口。可以用下面的命令开放端口:telnet smtp.gmail.com 587sudo ufw allow 587/tcp - 另外,Ubuntu 16.04的CA证书可能不全,导致SSL验证失败,更新一下:
sudo apt-get update && sudo apt-get install ca-certificates -y
5. 清除Laravel的配置缓存
修改配置后,一定要清缓存让新配置生效:
php artisan config:cache php artisan config:clear
6. 测试邮件发送
可以加个简单的测试路由验证一下:
Route::get('/test-mail', function() { Mail::raw('这是Laravel测试邮件', function($message) { $message->to('你的测试邮箱地址')->subject('Laravel邮件测试'); }); return '邮件请求已发送,去邮箱看看吧!'; });
访问这个路由,如果还是有问题,去storage/logs/laravel.log里找详细的错误日志,能帮你定位更具体的问题。
内容的提问来源于stack exchange,提问作者Nil the babe
相关产品推荐
相关产品推荐

