使用Mailgun Node.js模块批量发邮件时收件人可见全部收件地址问题
解决Mailgun Node.js模块批量MIME邮件收件人可见所有地址的问题
我之前用Mailgun发送批量MIME邮件时也踩过完全一样的坑——明明recipient-vars能正常替换主题,可所有收件人都能看到彼此的邮箱地址。其实问题出在MIME模式下批量发送的特殊配置要求,官方文档里的黄色警告其实隐含了几个你没注意到的关键点,我给你拆解一下:
核心原因
recipient-vars只是负责个性化内容替换,但要实现「每人只收到包含自己邮箱的独立邮件」,你还得告诉Mailgun要开启批量拆分模式,同时正确设置MIME邮件的收件人头字段。如果没做这两步,Mailgun会把所有收件人塞进同一封邮件的To字段里,自然所有人都能看到彼此的地址。
具体解决步骤
以下是针对Node.js模块+MIME HTML邮件的正确配置:
修改MIME的
To头为占位符
不要在MIME内容里直接写多个收件人,把To字段设为%recipient%——这是Mailgun的批量替换占位符,后续会被替换成每个收件人的具体邮箱。开启批量模式参数
o:batch
在API调用时必须添加'o:batch': true,这个参数会让Mailgun自动把批量邮件拆分成单份独立邮件发送,每份邮件的To字段只有对应的收件人。保持
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
相关产品推荐
相关产品推荐

