Laravel 9集成Mailgun时提示“Password is not set”问题排查求助
嘿,我之前在配置Laravel Mailgun的时候也踩过几乎一模一样的坑!咱们来一步步把这个问题搞定:
首先,清理冗余的.env配置
你当前的.env里同时有MAIL_MAILER=mailgun和旧版的MAIL_DRIVER=mailgun——Laravel从6.x版本开始就改用MAIL_MAILER来指定邮件驱动了,旧的MAIL_DRIVER配置会造成混淆,直接删掉它就行。
正确设置MAILGUN_SECRET
你提到不确定MAILGUN_SECRET该填什么:这个字段需要的是Mailgun控制台里的API密钥(不是你的邮箱密码,也不是Mailgun的登录密码)。你可以登录Mailgun后台,在「Settings」→「API Keys」里找到那个以key-开头的字符串,把它填进去就对了。
去掉不必要的MAIL_PASSWORD
当你用mailgun作为邮件驱动时,Laravel是通过API密钥来验证身份的,根本不需要MAIL_PASSWORD这个配置。这个字段是给SMTP驱动用的,留着它反而会让系统误以为你要走SMTP流程,从而抛出"Password is not set"的错误。直接把这一行注释掉或者删掉就好。
确认config/mail.php的配置
打开config/mail.php,确保mailgun驱动的配置是这样的:
'mailgun' => [ 'transport' => 'mailgun', 'key' => env('MAILGUN_SECRET'), 'domain' => env('MAILGUN_DOMAIN'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 'scheme' => 'https', ],
重点是key要正确引用MAILGUN_SECRET环境变量,别写错了。
别忘了清除配置缓存
修改.env之后,Laravel可能还在使用旧的缓存配置,这是很多人容易忽略的点!运行下面两个命令:
php artisan config:clear php artisan cache:clear
做完这些之后,再测试发送邮件应该就能解决"Password is not set"的问题了。另外提个小建议:MAIL_FROM_ADDRESS最好用你在Mailgun里验证过的域名下的邮箱(比如postmaster@yourdomain.mailgun.org),不然可能会触发邮件服务商的反垃圾机制哦。
内容的提问来源于stack exchange,提问作者Gabe Curran

