本文详解 laravel 在 ovh 云服务器(通过 laravel forge 部署)中无法发送 gmail 邮件的常见原因,重点指出 google 账户安全策略变更导致的认证失效问题,并提供可立即生效的配置修正、app password 生成步骤及安全验证要点。
在 Laravel 生产环境中突然无法发送邮件,且日志无报错、测试函数返回成功但收件箱/垃圾邮件箱均无任何投递痕迹——这是典型的SMTP 认证静默失败现象。尤其当您使用 Gmail 作为 SMTP 服务商(如配置中 MAIL_HOST=smtp.googlemail.com)时,根本原因几乎总是 Google 的账户安全策略升级:自 2022 年起,Google 已全面停用“用户名+密码”方式的第三方应用访问(即“低安全性应用访问”已彻底废弃),强制要求启用双重验证(2-Step Verification)并使用专用 App Password替代账户密码。
✅ 正确配置方案(推荐使用 SMTP + TLS)
请将 .env 文件中的邮件配置更新为以下经过生产验证的版本:
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 [email protected] MAIL_PASSWORD="your_16_digit_app_password" # 注意:必须用英文双引号包裹(含空格或特殊字符时必需) MAIL_ENCRYPTION=tls [email protected] MAIL_FROM_NAME="Your App Name"
⚠️ 关键修正说明:MAIL_HOST 必须为 smtp.gmail.com(smtp.googlemail.com 已弃用且不保证兼容);MAIL_PORT=587 + MAIL_ENCRYPTION=tls 是 Gmail 官方推荐的现代加密组合(非 465/SSL);MAIL_DRIVER 必须设为 smtp(mail 驱动依赖本地 sendmail,不可控且易被 OVH/Forge 环境限制);MAIL_PASSWORD 必须是 Google 生成的 16 位 App Password,绝非您的 Gmail 登录密码。
? 如何生成有效的 App Password
- 登录您的 Gmail 账户 → 进入 Google 账户管理;
- 左侧菜单选择 Security → 向下滚动至 “2-Step Verification” 并确保已开启(若未开启,请先完成设置);
- 返回 Security 页面,找到 “App passwords”(需已启用 2SV 才可见)→ 点击进入;
- 在 “Select app” 下拉框选择 Mail,在 “Select device” 中选择 Other (Custom name),输入如 Laravel-Production;
- 点击 Generate,系统将生成一个 16 位字母数字组合(如 abcd efgh ijkl mnop);
- 立即复制该密码(页面关闭后不可再次查看),粘贴至 .env 中 MAIL_PASSWORD 字段(保留引号)。
? 验证与调试建议
执行以下命令快速验证配置是否生效: