javascript - 使用 Mailgun 和 Node.js 批量发送电子邮件

标签 javascript node.js mailgun nodemailer

我正在使用 Mailgun node.js 模块发送批量电子邮件。

根据official docs中的大黄色警告信息,指定收件人变量应该会导致“向每个收件人发送一封单独​​的电子邮件,收件人字段中只有他们的电子邮件。”

但是,我的收件人可以看到所有“收件人”地址。我成功地使用 recipient-vars 为用户设置了电子邮件主题,所以看起来这些内容确实被正确读取了。

请注意,我正在使用 MIME 发送 HTML 电子邮件。我尝试使用更直接的纯文本变体,它似乎确实有效。

有谁能帮我理解为什么我的收件人可以看到所有其他收件人?我做错了什么,还是此功能不适用于 Mailgun MIME 电子邮件?

// recipients
var recipients = ['email1@email1.com', 'email2@email2.com', 'email3@email3.com'];
var recipientVars = {
    'email1@email1.com': {
        id: 1,
        subject: 'Subject 1'
    },
    'email2@email2.com': {
        id: 2,
        subject: 'Subject 2'
    },
    'email3@email3.com': {
        id: 3,
        subject: 'Subject 3'
    }
};

// options
var options = {
    from: 'Me <me@me.com>',
    to: recipients,
    'recipient-variables': recipientVars,
    subject: '%recipient.subject%',
    text: myMailText,
    html: myMailHTML,
    headers: {
        'X-Mailgun-Recipient-Variables': JSON.stringify(recipientVars)
    }
};

// create mail
var mail = new nodemailer(options);

// send mail
mail.compile().build((err, message) => {
    var mailData = {
        to: recipients,
        message: message.toString('ascii'),
        'recipient-variables': recipientVars
    };
    mailgun.messages().sendMime(mailData, (err, res) => {
        console.log(res);
    });
});

最佳答案

似乎此功能不适用于 sendMime()方法,但它适用于常规 send()即使没有任何邮件编译的方法。这是工作代码片段:

const mailgun = require('mailgun-js')({
  apiKey: 'api_key',
  domain: 'domain'
});

const recipients = ['email1@gmail.com', 'email2@gmail.com'];
const recipientVars = {
  'email1@gmail.com': {
    id: 1,
    subject: 'Subject 1',
    name: 'Name 1'
  },
  'email2@gmail.com': {
    id: 2,
    subject: 'Subject 2',
    name: 'Name 2'
  }
};

const envelope = {
  from: 'Sender <sender@gmail.com>',
  to: recipients,
  subject: '%recipient.subject%',
  html: 'Hey <strong>%recipient.name%<strong>',
  'recipient-variables': recipientVars,
};

mailgun.messages().send(envelope, function (error, body) {
  console.log(body);
});

如您所见,所有占位符均已填充,并且 <strong>标记正确呈现。

关于javascript - 使用 Mailgun 和 Node.js 批量发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49508873/

相关文章:

node.js - gitlab-ci 构建 grpc 失败

mailgun - 通过 Mailgun 发送错误 : '421 Syntax error'

php - 从 Mailgun 表单 Post PHP 中检索附件

javascript - MYSQL多列总和差值

php - 使用 php 创建一个调用 php 函数的按钮

javascript - 使用 jQuery 从这个 html 表单中获取文本区域的 ID

javascript - HTML 中的地址函数

node.js - Mongoose 不删除子文档

node.js - Electron - 在本地 Windows 网络中使用 require

mailgun - 收不到邮件,但 Mailgun 显示 100% 送达率