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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:58:18