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

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端口:
    在服务器上执行这个命令:
    telnet smtp.gmail.com 587
    
    如果连接失败,说明要么是服务器的防火墙(比如ufw)封了587端口,要么是云服务商的安全组没开放这个端口。可以用下面的命令开放端口:
    sudo 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:21:55