Laravel 5.4重置密码时出现Swift_TransportException连接错误求助
解决Laravel 5.4中Mailtrap连接失败的Swift_TransportException问题
嘿,我来帮你排查这个Laravel 5.4重置密码时Mailtrap连接失败的问题!这种情况我碰到过好几次,咱们一步步来解决:
先确认.env配置的细节
- 仔细检查
MAIL_USERNAME和MAIL_PASSWORD是不是从Mailtrap控制台复制的完整正确值,有时候复制时会不小心带空格或者漏字符,这是最常见的坑 - 把
MAIL_ENCRYPTION=null改成MAIL_ENCRYPTION=tls试试,Laravel 5.4对加密的处理比较严格,2525端口配合TLS是Mailtrap推荐的配置 - 保存.env后,务必执行这两个命令清空配置缓存:
不然Laravel可能还在使用旧的缓存配置,白改了!php artisan config:clear php artisan cache:clear
- 仔细检查
排查网络层面的问题
- 先在本地终端或服务器上ping一下Mailtrap的服务器,确认网络连通性:
如果ping不通,那大概率是本地防火墙、杀毒软件,或者服务器安全组/防火墙把2525端口的出口给挡住了,得去开放这个端口ping smtp.mailtrap.io - 也可以用telnet测试端口是否能正常连接:
要是连不上,直接找网络管理员或者云服务商调整防火墙规则就行telnet smtp.mailtrap.io 2525
- 先在本地终端或服务器上ping一下Mailtrap的服务器,确认网络连通性:
检查Laravel的mail配置文件
- 打开
config/mail.php,确认里面的配置都是从.env读取的,比如:
别直接把值写死在配置文件里,不然.env的修改不会生效'driver' => env('MAIL_DRIVER', 'smtp'), 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), - 可以在smtp配置里加上
stream选项,解决SSL验证的问题:
这能避免本地环境对Mailtrap证书的误判'smtp' => [ 'driver' => 'smtp', 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'stream' => [ 'ssl' => [ 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ], ], ],
- 打开
换个端口试试
- Mailtrap还支持465(SSL)和587(TLS)端口,试试把
MAIL_PORT改成587,MAIL_ENCRYPTION设为tls;或者端口用465,加密设为ssl,说不定能绕开当前端口的限制
- Mailtrap还支持465(SSL)和587(TLS)端口,试试把
写个简单测试验证
- 在
routes/web.php里加个测试路由,直接发送邮件看报错详情:
访问这个路由,能得到更精准的错误信息,方便进一步排查Route::get('/test-mail', function() { try { Mail::raw('这是一封测试邮件', function($message) { $message->to('your-test-email@example.com')->subject('测试Mailtrap连接'); }); return '邮件发送请求已提交'; } catch (\Exception $e) { return '错误详情:' . $e->getMessage(); } });
- 在
内容的提问来源于stack exchange,提问作者Mujahidur Rahman Mithun IUB
相关产品推荐
相关产品推荐

