Laravel部署Google Compute Engine后Gmail SMTP发件异常求助
嘿,我之前帮朋友排查过一模一样的问题!GCE对SMTP出站端口的限制是最常见的元凶,咱们一步步来搞定:
解决Laravel在Google Compute Engine上Gmail SMTP发件失败的问题
1. 先搞懂核心原因:GCE的端口限制
Google Compute Engine默认封禁了25、465、587这些常用的SMTP出站端口(为了遏制垃圾邮件),这就是为啥你本地和AWS都正常,到GCE就哑火的关键!
2. 最靠谱的解决办法:改用Google官方邮件驱动
Laravel支持直接对接Google的邮件服务,比SMTP更稳定还能绕开端口限制:
- 先安装Google Cloud Mailer扩展包:
composer require google/cloud-mailer - 打开
config/mail.php,在mailers数组里添加Gmail驱动配置:'gmail' => [ 'transport' => 'gmail', ], - 更新你的
.env文件,把MAIL_MAILER改成gmail:MAIL_MAILER=gmail - 最后在GCE控制台给你的实例服务账号添加
roles/cloudmailer.sender权限,或者上传服务账号密钥文件并配置环境变量GOOGLE_APPLICATION_CREDENTIALS指向密钥路径。
3. 如果用的是普通个人Gmail账号
要是你没用到Google Workspace,那得先做这两步:
- 给你的Gmail账号开启两步验证,然后生成一个应用专用密码,把
.env里的MAIL_PASSWORD替换成这个专用密码(别用你平时登录的密码)。 - 试试把SMTP端口改成2525(GCE允许这个端口出站),同时把加密方式改成
tls:MAIL_PORT=2525 MAIL_ENCRYPTION=tls
4. 最后再排查几个小细节
- 翻一翻Laravel的日志文件
storage/logs/laravel.log,有时候表面没报错,日志里藏着认证失败或者连接超时的细节。 - 确认GCE实例的防火墙规则允许出站的HTTPS/SSL流量(虽然改了端口,但基础网络权限得够)。
- 本地用同样的
.env配置测试发件,确保账号和应用专用密码是有效的。
内容的提问来源于stack exchange,提问作者Ronak Solanki
相关产品推荐
相关产品推荐

