使用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
相关产品推荐
相关产品推荐

