Laravel发送邮件遇异常:预期响应码220却收到空码
解决Laravel中Gmail SMTP发送邮件时“预期响应码220,但收到空响应”的问题
Hey there! 我之前在Laravel里用Gmail SMTP发邮件时也踩过一模一样的坑,给你梳理几个关键的排查和解决步骤,应该能帮你搞定这个问题:
必须使用应用专用密码(App Password)
因为你开启了谷歌双重验证,直接用邮箱原密码是无法通过SMTP验证的。你需要去谷歌账号的「安全」设置里,找到「应用专用密码」(前提是已经开启2FA),生成一个专门用于邮件客户端的密码,然后把.env文件里的MAIL_PASSWORD替换成这个生成的密码。核对完整的.env邮件配置
确保你的邮件配置项没有遗漏或错误,正确的配置应该是这样的:MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=你的完整Gmail邮箱地址 MAIL_PASSWORD=刚才生成的应用专用密码 MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=你的Gmail邮箱地址 MAIL_FROM_NAME="${APP_NAME}"这里要注意
MAIL_ENCRYPTION是tls,对应587端口;如果用465端口的话才是ssl,别搞混了。清除Laravel配置缓存
改完.env文件后,Laravel可能还在使用旧的缓存配置,一定要执行以下命令刷新缓存:php artisan config:clear php artisan cache:clear检查服务器端口与防火墙
确认你的服务器没有拦截587端口,有些主机商会默认禁用SMTP相关端口,你可以联系主机商确认,或者自己在服务器防火墙里开放587端口的出站请求。验证PHP的openssl扩展是否开启
打开你的php.ini配置文件,检查extension=openssl这一行有没有被注释掉,如果被注释了就去掉前面的分号,然后重启你的Web服务器(比如Nginx或Apache)。
快速测试方法
你可以写一个简单的路由来测试邮件发送是否正常:
Route::get('/test-email', function () { try { \Illuminate\Support\Facades\Mail::raw('这是Laravel Gmail SMTP的测试邮件', function ($message) { $message->to('你的测试邮箱地址')->subject('Laravel邮件测试'); }); return '邮件发送请求已提交,请查收邮箱!'; } catch (\Exception $e) { return '发送失败:' . $e->getMessage(); } });
内容的提问来源于stack exchange,提问作者Mohsin Abbas
相关产品推荐
相关产品推荐

