【问题标题】:Batch emailing with Mailgun and Node.js使用 Mailgun 和 Node.js 批量发送电子邮件
【发布时间】:2018-09-05 15:01:00
【问题描述】:

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

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

但是,我的收件人可以看到所有“收件人”地址。我成功地使用接收者变量为用户设置电子邮件主题,所以看起来这些都被正确读取了。

请注意,我正在使用 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);
    });
});

【问题讨论】:

    标签: javascript node.js mailgun nodemailer


    【解决方案1】:

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

    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);
    });
    

    如您所见,所有占位符均已填充,&lt;strong&gt; 标记已正确呈现。

    【讨论】:

    • 感谢您的详细解答。我有一个问题;是否有 mailgun api 来获取所有订阅者;即您已经硬编码了您的收件人数组;我想以编程方式创建该数组;浏览了他们的文档,但找不到我想要的;实际上,我找到了如何获取所有未订阅者的列表,但我想要那些订阅者的列表;有什么指点吗?
    • 我不确定,没有这样的任务,但他们有邮件列表 api enpoints - documentation.mailgun.com/en/latest/…。也许它可以帮助
    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 2016-08-14
    • 2019-05-11
    • 2019-11-18
    • 2014-04-14
    • 2017-10-12
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多