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

使用Nest.js调用Mailgun发邮件遇401 Forbidden错误,求解决方案

解决Mailgun 401 Forbidden错误的方案

401错误本质是认证失败,结合你的代码和提供的信息,我整理了几个最可能的修复方向:

1. 确认API Key的正确性

首先,Mailgun的私有API Key必须以 key- 开头(比如 key-920d6161ca860e7b84d9de75e14e...),但从你打印的实例信息来看,你的API Key是 920d6161ca860e7b84d9de75e14exxx-xxx-xxx,没有key-前缀,这大概率是问题所在!

  • 登录Mailgun控制台,找到你的域名对应的私有API Key(不是公钥),复制完整的带key-前缀的字符串。
  • 检查你的环境变量MAILGUN_API_KEY是否正确配置,有没有多空格、少字符的情况。

2. 验证域名配置与区域匹配

你的域名是lokalne-dobrodziejstwa.pl,需要确认:

  • 该域名在Mailgun控制台中已经完成DNS验证(MX、TXT等记录都配置正确,状态显示“Verified”)。如果域名未验证,Mailgun会拒绝发送请求。
  • 如果你的域名是在Mailgun的欧盟(EU)区域创建的,默认的API host api.mailgun.net不适用,需要修改为api.eu.mailgun.net。修改初始化代码:
    this.mg = Mailgun({
      apiKey: this.configService.get('MAILGUN_API_KEY'),
      domain: this.configService.get('MAILGUN_API_DOMAIN'),
      host: 'api.eu.mailgun.net' // 新增这行,针对EU区域
    });
    

3. 检查发件人邮箱的合规性

发件人rejestracja@lokalne-dobrodziejstwa.pl必须满足:

  • 属于你在Mailgun中已验证的域名lokalne-dobrodziejstwa.pl,不能使用未关联该域名的邮箱。
  • 如果是新注册的域名,Mailgun可能会有初始发送限制,确保发件人邮箱没有被标记为可疑。

4. 代码优化(非401直接原因,但提升可读性)

mailgun-js的send方法本身就支持Promise,你可以简化Promise包装的代码,避免回调嵌套:

send(data: IMailGunData): Promise<Mailgun.messages.SendResponse> {
  console.log(data);
  console.log(this.mg);
  return this.mg.messages().send(data); // 直接返回方法的Promise
}

最后,建议先通过Mailgun控制台的API测试工具发送一封测试邮件,确认API Key和域名配置无误后,再回到代码中调试,这样可以快速排除平台配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:37:42