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

使用MailGun Node API无法发送邮件:无报错但无邮件及日志

排查Mailgun Node API邮件发送无响应问题

嘿,我帮你梳理下问题所在!你的代码里有几个关键错误,导致邮件既发不出去,也没在Mailgun日志里留下记录,咱们一步步修正:

1. Domain参数格式错误(核心问题)

你传给mailgun-js的domain参数是完整的API URL:https://api.mailgun.net/v3/XXXXXXXXX,但这个参数只需要填写你的Mailgun域名(比如自定义的mg.yourdomain.com,或者Mailgun提供的沙箱域名sandboxxxxx.mailgun.org),不需要带API前缀。格式错误会直接导致API请求无效,连日志都不会生成。

2. HTML内容无需转义

你写的html字段用了转义字符<和>,Mailgun会把这些当成纯文本显示,而不是解析成HTML。直接写原始的HTML标签即可。

3. 简化异步处理逻辑

mailgun-js的send方法本身就支持Promise,不需要手动再包裹一层Promise,用async/await可以让代码更简洁易读,也更容易捕获错误。

修正后的代码

const mailgun = require('mailgun-js')({ 
  apiKey: '你的Private API Key', 
  domain: '你的Mailgun域名(比如sandboxxxxx.mailgun.org)' 
});

async function sendInvite() {
  const email = process.argv[process.argv.length - 1];
  const data = {
    from: 'support@acme.com',
    to: email,
    subject: 'Welcome!',
    html: '<p>Welcome!</p><p>You are very special!</p>'
  };

  try {
    const body = await mailgun.messages().send(data);
    console.log(`Invite sent to ${email}`);
    console.log(data);
    console.log(body);
    return body;
  } catch (error) {
    console.error('发送失败:', error);
    throw error;
  }
}

sendInvite()
  .then(() => console.log('Done'))
  .catch((err) => console.error(err));

额外排查要点

  • 确认API Key是Private API Key(在Mailgun控制台的“API Keys”页面获取),不要用Public Key。
  • 如果用的是沙箱域名,收件人必须是在Mailgun控制台验证过的邮箱地址,否则邮件会被拦截。
  • 检查Mailgun控制台的“Logs”页面是否开启了日志记录,有时候需要手动启用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:03:53