You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署Laravel用Mailgun发信报401错误如何排查解决

401 Mailgun发信错误排查方案

这个报错核心是Heroku环境下请求Mailgun接口时鉴权未通过,既然本地环境发信正常,说明Mailgun账号本身、本地配置逻辑没有问题,按以下优先级排查即可:

  • 最高发原因:Heroku未加载Mailgun配置
    Heroku默认不会读取随代码提交的.env文件,该文件默认在.gitignore忽略列表中,部署时根本不会上传到Heroku服务器,你本地写在.env里的密钥、域名配置在生产环境是空值,请求自然被Mailgun拒绝返回401。
    解决操作:
    1. 打开Heroku控制台对应项目的Settings页,找到Config Vars配置块
    2. 逐条添加和本地.env完全一致的配置项:
      • MAIL_MAILER = mailgun
      • MAILGUN_DOMAIN = sandboxa0575477a07c4d46bc474dfd7d104316.mailgun.org
      • MAILGUN_SECRET = 6fb8c8fdbd262ef08ff062388c8cb9f4-02fa25a3-ff2ddce5
    3. 本地装了Heroku CLI的话可以直接执行命令批量配置,执行完会自动重启服务:
      heroku config:set MAIL_MAILER=mailgun MAILGUN_DOMAIN=sandboxa0575477a07c4d46bc474dfd7d104316.mailgun.org MAILGUN_SECRET=6fb8c8fdbd262ef08ff062388c8cb9f4-02fa25a3-ff2ddce5 -a 替换成你的Heroku应用名
      
  • 第二高发原因:Laravel配置缓存未刷新
    部署Laravel项目时通常会执行php artisan config:cache生成配置缓存提升性能,如果是先跑了缓存命令再加的环境变量,新配置不会被加载,还是会用旧的空值发请求。
    解决操作:
    # 进入Heroku应用的命令行环境
    heroku run bash -a 替换成你的Heroku应用名
    # 清除旧配置缓存
    php artisan config:clear
    # 重新生成配置缓存
    php artisan config:cache
    
  • 其他偶发原因排查
    1. 检查Heroku Config Vars里填的配置值有没有多余的首尾空格、多余的引号,这类隐形字符会直接导致密钥校验失败
    2. 检查项目config/services.php中的mailgun配置,不要硬编码固定的域名、密钥值,必须是从环境变量读取的格式:
      'mailgun' => [
          'domain' => env('MAILGUN_DOMAIN'),
          'secret' => env('MAILGUN_SECRET'),
      ],
      
  • 配置校验方法
    所有配置改完后,在Heroku命令行执行php artisan tinker,输入config('services.mailgun')回车,打印出来的domain、secret值和你配置的完全一致,再测试发信即可恢复正常。

不要尝试把本地.env文件提交到Heroku代码仓库来解决配置问题,这种方式既不符合Heroku部署规范,还会泄露敏感配置信息,存在安全隐患。

内容的提问来源于stack exchange,提问作者php_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:18:28