Laravel配置Gmail SMTP却连接Mailpit失败的问题求助
问题分析与解决方案
你遇到的核心问题是Laravel未加载.env中配置的Gmail SMTP参数,仍默认使用Mailpit配置。以下是逐步排查和解决方法:
1. 确认配置文件的变量引用
打开config/mail.php,检查smtp驱动的配置是否正确读取环境变量:
'smtp' => [ 'transport' => 'smtp', 'host' => env('MAIL_HOST', 'mailpit'), 'port' => env('MAIL_PORT', 1025), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => null, // 你的stream配置... ],
确保每个字段通过env()函数读取.env值,默认值为Mailpit是Laravel默认逻辑,正常会被你的.env覆盖。
2. 彻底清除配置缓存
若之前执行过php artisan config:cache,Laravel会生成配置缓存文件,后续.env修改不会生效。执行以下命令清理:
php artisan config:clear php artisan cache:clear php artisan route:clear
清理完成后重启本地开发服务器,确保新配置生效。
3. 修正Gmail SMTP配置参数
你的.env存在参数匹配错误:
- 端口
587对应加密方式为tls,端口465才用ssl
修正后的.env配置:
MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=est.juan.arango1@unimilitar.edu.co MAIL_PASSWORD=[你的Google App Password] MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS="est.juan.arango1@unimilitar.edu.co" MAIL_FROM_NAME="${APP_NAME}"
4. 验证Google App Password有效性
确保满足以下条件:
- Google账号已开启两步验证
- 使用的是专门生成的App Password(非Google账号密码)
- App Password是针对"Mail"应用生成的
5. 检查是否存在覆盖配置的文件
Laravel优先加载.env.local、.env.testing等环境特定配置文件,若这类文件存在且配置了Mailpit参数,会覆盖主.env。检查项目根目录,如有则删除或修改其中的邮件配置。
6. 测试当前配置
使用php artisan tinker进入交互模式,执行命令查看实际加载的邮件配置:
dd(config('mail.mailers.smtp'));
输出的host、port等字段应与.env中Gmail参数一致,若仍为mailpit,需检查.env文件语法(比如多余空格、引号错误)。
内容的提问来源于stack exchange,提问作者Juan Pablo Arango Lizcano
相关产品推荐
相关产品推荐

