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

使用Mailgun.js发送博客新闻通讯时触发401未授权错误求助

问题分析与解决方案

核心问题

基于Next.js + Sanity搭建的博客,集成Mailgun新闻通讯功能时,订阅流程正常,但发送邮件时触发401 Unauthorized错误,已尝试多类调试手段仍未解决,怀疑与越南.vn后缀域名有关。

针对性排查与修复步骤

1. 确认Mailgun域名权限与区域匹配

  • 核实Mailgun是否支持.vn顶级域名的发送权限,部分区域域名可能存在合规限制,可直接联系Mailgun客服确认域名准入状态。
  • 严格匹配API端点与账号区域:若账号注册在欧盟区,必须使用https://api.eu.mailgun.net/,同时确保域名归属区域与API端点一致,避免跨区域调用导致权限校验失败。

2. 密钥与认证格式精准校验

  • 区分两类密钥的使用场景:
    • Domain Sending API Key:仅用于对应域名下的邮件发送,格式为key-xxxxxx,需直接以完整格式传入请求头,无需额外拼接前缀。
    • Mailgun API Key:全局账号密钥,权限覆盖账号级操作,但发送邮件必须使用Domain Sending API Key。
  • 环境变量配置注意:
    • 无需添加NEXT_PUBLIC_前缀,Mailgun密钥属于敏感信息,仅在服务端通过process.env.MAILGUN_API_KEY调用即可。
    • 确保.env.local文件放置在Next.js项目根目录,且重启开发服务器使变量生效,避免缓存导致的变量未加载。

3. IP访问控制细节检查

  • 若开启Mailgun的IP访问管理,需添加Next.js服务的公网IP(生产环境)或ngrok的转发IP(开发环境),而非ngrok的Web Interface IP(仅用于隧道管理,不参与API请求)。
  • 临时关闭IP访问控制进行测试,排除白名单配置错误的可能。

4. 请求头与格式规范验证

  • 发送邮件请求必须使用Basic Auth认证,将api:${YOUR_DOMAIN_KEY}进行Base64编码后放入Authorization头,示例代码:
    const auth = Buffer.from(`api:${process.env.MAILGUN_DOMAIN_KEY}`).toString('base64');
    const response = await fetch('https://api.eu.mailgun.net/v3/YOUR_DOMAIN/messages', {
      method: 'POST',
      headers: {
        'Authorization': `Basic ${auth}`,
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      body: new URLSearchParams({
        from: 'Your Blog <newsletter@your-domain.vn>',
        to: 'subscriber@example.com',
        subject: 'Latest Updates',
        text: 'Your newsletter content here'
      })
    });
    
  • 确保请求体中from地址与Mailgun验证的域名完全匹配,禁止使用未验证的邮箱后缀。

5. 沙箱域名完整测试流程

  • 使用Mailgun沙箱域名时,仅能发送至账号内已验证的测试邮箱,无法发送到任意邮箱,否则会触发权限错误。
  • 沙箱域名的API密钥需单独获取,与正式域名密钥不同,需确认是否使用正确。

最终验证建议

若以上步骤均无效,可直接使用Mailgun控制台内的官方API测试工具发送测试邮件:若同样报错,可确认是账号或域名权限问题;若测试成功,则问题出在Next.js服务端的请求代码或环境配置上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:12:20