Laravel 5.6发送邮件失败求助:SMTP配置及Mailable类问题
搞定Laravel 5.6用Gmail发邮件失败的问题
嘿,我来帮你排查解决这个邮件发送失败的问题,这也是Laravel新手用Gmail发邮件时常见的坑,一步步来:
一、先搞定Gmail的安全限制(最关键!)
现在Google对第三方应用登录管得很严,普通密码根本用不了,得这么弄:
- 优先推荐:开两步验证+生成应用专用密码
- 登你的Gmail账号,进「安全」设置页
- 先把「两步验证」开了(这一步是前提)
- 找到「应用专用密码」选项,生成一个专门给Laravel用的密码,把这个密码替换到你.env里的
MAIL_PASSWORD字段
- 如果不想开两步验证,试试找「不太安全的应用访问」开关打开(不过现在很多账号已经被Google移除这个选项了,还是优先上面的方法靠谱)
二、确认.env配置+清缓存
你的基础配置看起来没毛病,但要注意两点:
- 确保
MAIL_USERNAME是完整的Gmail地址,比如mymail@gmail.com,别只写前缀 - 改完.env一定要清配置缓存!不然Laravel还会用旧配置,跑这俩命令:
php artisan config:clear php artisan cache:clear
三、把你的Mailable类补全
你贴的代码里build方法没写完,正确的写法得指定邮件视图和传递数据,比如:
public function build() { return $this->subject('新咨询通知') // 可以给邮件加个主题 ->view('emails.inquiry') // 对应你在resources/views/emails下的inquiry.blade.php视图文件 ->with('data', $this->data); }
记得要创建对应的视图文件,在视图里就能用$data来调用你传过来的内容了。
四、写个简单测试验证逻辑
可以在routes/web.php里加个测试路由,快速验证邮件能不能发:
Route::get('/test-mail', function () { $testData = ['name' => '测试君', 'content' => '这是一封Laravel测试邮件']; Mail::to('你的测试邮箱@xxx.com')->send(new \App\Mail\InquirySent($testData)); return '邮件发送尝试完成,去收件箱看看!'; });
访问这个路由,如果报错,Laravel会抛出具体的错误信息,比如权限问题、网络不通之类的,照着提示改就行。
五、其他可能的小坑
- 服务器端口被封:有些服务器会屏蔽外部SMTP端口,确认你的服务器能访问
smtp.gmail.com的587端口 - TLS版本问题:如果遇到TLS相关错误,试试把
MAIL_ENCRYPTION改成ssl,端口换成465试试(不过官方推荐的还是587+TLS)
内容的提问来源于stack exchange,提问作者tigerel
相关产品推荐
相关产品推荐

