Laravel 8通过Mailgun API发信返回401 Unauthorized错误如何解决?
排查解决步骤
- 首先补装Laravel 8+ Mailgun驱动必需的依赖包,Laravel 7版本后重构了邮件驱动体系,不再默认内置Mailgun相关依赖,执行以下命令安装即可:
composer require symfony/mailgun-mailer symfony/http-client
安装完成后重新生成配置缓存php artisan config:cache再测试发信。
- 检查
.env中MAILGUN_SECRET值的格式,如果密钥包含特殊字符、#符号,需要将完整值用双引号包裹,避免.env解析时被截断:
MAILGUN_SECRET="key-##########################"
- 你之前的SMTP测试逻辑存在错误:使用
smtp.mailtrap.io作为发信主机时,邮件只会投递到Mailtrap的测试收件箱,根本不会请求Mailgun的服务,自然查不到对应日志。要验证SMTP发信逻辑请使用Mailgun官方提供的SMTP配置:
MAIL_MAILER=smtp MAIL_HOST=smtp.mailgun.org MAIL_PORT=587 MAIL_USERNAME=你的Mailgun域名对应SMTP用户名 MAIL_PASSWORD=你的Mailgun域名对应SMTP密码 MAIL_ENCRYPTION=tls
- 如果站点使用队列发送邮件,修改配置后必须重启队列工作进程,队列进程会缓存启动时的全部配置,仅刷新配置缓存不会生效:
php artisan queue:restart
- 确认你使用的Mailgun密钥权限:若你使用的是域名级专属密钥,需要确认该密钥绑定的域名和你配置的
MAILGUN_DOMAIN完全一致,跨域名调用会直接返回401错误。
内容的提问来源于stack exchange,提问作者Dylan Glockler
相关产品推荐
相关产品推荐

