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

使用Mailgun Node.js模块批量发邮件时收件人可见全部收件地址问题

解决Mailgun Node.js模块批量MIME邮件收件人可见所有地址的问题

我之前用Mailgun发送批量MIME邮件时也踩过完全一样的坑——明明recipient-vars能正常替换主题,可所有收件人都能看到彼此的邮箱地址。其实问题出在MIME模式下批量发送的特殊配置要求,官方文档里的黄色警告其实隐含了几个你没注意到的关键点,我给你拆解一下:

核心原因

recipient-vars只是负责个性化内容替换,但要实现「每人只收到包含自己邮箱的独立邮件」,你还得告诉Mailgun要开启批量拆分模式,同时正确设置MIME邮件的收件人头字段。如果没做这两步,Mailgun会把所有收件人塞进同一封邮件的To字段里,自然所有人都能看到彼此的地址。

具体解决步骤

以下是针对Node.js模块+MIME HTML邮件的正确配置:

  1. 修改MIME的To头为占位符
    不要在MIME内容里直接写多个收件人,把To字段设为%recipient%——这是Mailgun的批量替换占位符,后续会被替换成每个收件人的具体邮箱。

  2. 开启批量模式参数o:batch
    在API调用时必须添加'o:batch': true,这个参数会让Mailgun自动把批量邮件拆分成单份独立邮件发送,每份邮件的To字段只有对应的收件人。

  3. 保持recipient-vars的正确配置
    你之前已经能成功替换主题,说明这部分没问题,继续保留即可。

完整代码示例

const mailgun = require('mailgun-js')({ apiKey: '你的API密钥', domain: '你的Mailgun域名' });

// 个性化变量配置,和你之前的用法一致
const recipientVars = {
  'user1@example.com': { subject: '专属主题:你的订单已发货', name: '张三' },
  'user2@example.com': { subject: '专属主题:会员福利已到账', name: '李四' }
};

// 构造MIME格式的邮件内容,注意To字段用占位符
const mimeContent = `From: 你的品牌名 <sender@yourdomain.com>
To: %recipient%
Subject: %recipient.subject%
Content-Type: text/html; charset=utf-8

<p>你好 %recipient.name%,这是你的个性化邮件内容</p>`;

// API调用参数
const sendData = {
  to: Object.keys(recipientVars), // 传入所有收件人邮箱列表
  message: mimeContent,
  'recipient-vars': JSON.stringify(recipientVars),
  'o:batch': true // 关键:开启批量拆分模式
};

// 发送邮件
mailgun.messages.sendMime(sendData, (err, result) => {
  if (err) {
    console.error('发送失败:', err);
  } else {
    console.log('批量邮件已提交:', result);
  }
});

额外注意事项

  • 如果你是用第三方库(比如nodemailer)生成MIME内容,一定要确保生成的To字段是%recipient%,而不是实际的收件人列表。
  • 不要在MIME里添加Cc或Bcc字段包含其他收件人,否则即使开启批量模式,这些地址还是会被显示。

这样配置后,每个收件人收到的邮件里To字段只会显示自己的邮箱,同时主题和内容的个性化替换依然正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:37