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

Laravel邮件本地正常但生产服务器无法发送问题求助

解决Laravel生产服务器无法发送Gmail邮件的问题

咱们先梳理下你遇到的核心情况:本地环境用Laravel通过Gmail SMTP发邮件完全正常,但部署到生产服务器后就失效了,试过开启低安全应用、切换到sendmail都没解决。下面我给你拆解几个生产环境常见的坑,以及对应的解决办法:

1. 优先检查Gmail账户的安全设置(别再依赖“低安全应用”了)

谷歌现在已经逐步淘汰了“允许低安全性应用访问”这个选项,取而代之的是两步验证+应用密码的方案,这才是当前Gmail SMTP认证的标准方式:

  • 先确保你的谷歌账户开启了两步验证(没开的话去账户安全页开启)
  • 进入谷歌账户【安全性】页面,找到【应用密码】选项(只有开了两步验证才会显示)
  • 创建一个专门给Laravel邮件用的应用密码,把这个密码替换掉.env里的MAIL_PASSWORD

2. 排查生产服务器的端口/防火墙限制

很多生产服务器会对外出的SMTP端口做拦截,尤其是465(SSL)或587(TLS)端口。你可以在服务器上用命令测试连通性:

# 测试465端口
telnet smtp.gmail.com 465
# 测试587端口
telnet smtp.gmail.com 587

如果连接失败,说明服务器防火墙或服务商封了端口,要么联系服务商解封,要么改用服务器自带的sendmail/postfix服务(前提是服务正常运行)。

3. 别忘清除Laravel的配置缓存

生产环境下Laravel会缓存配置文件,如果你修改了.env里的邮件配置,必须清除缓存才能生效:

# 清除旧的配置缓存
php artisan config:clear
# 修改配置后重新缓存(可选)
php artisan config:cache

这是很多人容易忽略的点——改了配置但没清缓存,应用一直用旧的设置在跑。

4. 切换到TLS端口试试兼容性

有时候SSL(465)在某些服务器上会有兼容性问题,你可以试试切换到TLS端口587,修改.env配置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=pranav.bitware@gmail.com
MAIL_PASSWORD=你的应用密码
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=pranav.bitware@gmail.com
MAIL_FROM_NAME="你的发件人名称"

修改后记得执行配置缓存清除命令。

5. Sendmail模式的细节排查

如果切换到sendmail还是不行,先确认服务器上的sendmail服务状态:

# 检查服务状态
service sendmail status
# 重启服务(如果异常)
service sendmail restart

另外要确保Laravel的sendmail路径配置正确,打开config/mail.php查看:

'sendmail' => '/usr/sbin/sendmail -bs',

如果路径不对,用which sendmail命令查看服务器上的实际路径,替换进去即可。

6. 查看日志定位具体错误

如果上面的方法都没用,一定要去看Laravel的日志文件(默认在storage/logs/laravel.log),里面会有具体的报错信息——比如认证失败、连接超时、端口不通等,根据日志信息再针对性解决会高效得多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:54:34