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

Laravel服务器Mail::send SMTP认证失败,本地运行正常问题咨询

问题:Laravel服务器Mail::send函数失效但本地正常运行

近期我们的Laravel服务器上的Mail::send函数突然停止工作,但本地运行该函数却一切正常。

代码示例

Mail::send(
    'emails.hello',
    $data,
    function ($message) use ($data) {
        $message->from('admin@example.org', 'Admin');
        $message->to('recipient@example.org', 'Admin')
            ->replyTo($data['email'], $data['name'])
            ->subject('Contact Request');
    }
);

环境配置说明

服务器与本地实例的.env配置完全一致,且已执行php artisan config:cache确保加载当前.env文件:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxx
MAIL_PASSWORD=xxx
MAIL_ENCRYPTION=tls

两者均运行Laravel 5.5.50,服务器PHP版本为7.2.24,本地为7.4.33。

服务器返回错误信息

Failed to authenticate on SMTP server with username "xxx" using 3 possible authenticators. 
Authenticator LOGIN returned Expected response code 235 but got code "535", with message "535-5.7.8 Username and Password not accepted.

我的邮箱已开启双因素认证,使用应用密码进行验证。请问这是Laravel配置问题还是Google邮箱配置问题?


问题排查与分析

从错误信息535-5.7.8 Username and Password not accepted来看,核心是SMTP认证失败,结合本地正常、服务器异常的差异,大概率是Google邮箱侧的配置/限制问题,而非Laravel配置问题,具体排查方向如下:

  • 服务器IP被Google安全机制拦截:Google会对陌生或异常IP的SMTP登录行为进行拦截。你可以登录Google账号的安全中心,查看最近的登录记录,确认服务器IP是否被标记为可疑,若有则手动允许该IP的访问权限。
  • 应用密码有效性验证:虽然本地能正常使用,但要确认服务器.env中的MAIL_PASSWORD是否完全匹配正确的应用密码(注意不要有空格、大小写错误)。另外,当Google账号的安全设置变更时,应用密码可能会失效,建议重新生成一个应用密码替换到服务器.env中,替换后务必执行php artisan config:cache刷新配置缓存。
  • 服务器网络限制检查:排查服务器的防火墙、安全组是否拦截了587端口的出站请求,导致无法连接Google SMTP服务器。可以在服务器上执行telnet smtp.gmail.com 587测试是否能正常建立连接。
  • Laravel与PHP版本兼容性(低概率):虽然错误指向认证而非连接,但服务器PHP7.2与Laravel5.5的组合,可能存在TLS握手的兼容性问题。可以尝试将MAIL_ENCRYPTION改为ssl、MAIL_PORT改为465测试,但需确保Google账号允许SSL方式的SMTP访问。

内容的提问来源于stack exchange,提问作者brassmookie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:48:34