是否可以通过SendGrid API发送批量预渲染电子邮件?

时间:2014-07-11 10:37:19

标签: node.js sendgrid

我查看了SendGrid API文档,但未发现发送批量预呈现电子邮件的可能性。这可能吗?

我想要做的是使用我自己的模板引擎呈现单个电子邮件内容,然后将这些内容(包括收件人,主题和邮件正文)作为批量上传到SendGrid系统。

我可以毫无问题地发送交易邮件,但目前对于大量邮件来说速度太慢。

我目前正在使用Node.js库https://github.com/sendgrid/sendgrid-nodejs

1 个答案:

答案 0 :(得分:5)

有几种可能性。通常,为了快速发送大量电子邮件,我建议SMTPAPI允许您从一个请求发送最多10,000封电子邮件。但是,这需要使用SendGrid的substitution system来自定义消息。 由于您想使用自己的模板系统,这可能不是您的最佳选择。

我所关注的一件事就是代码优化,因为并行发送一堆电子邮件可能不会花费太长时间。据了解,我们的一些最大发件人通过个人连接一次性转发数百万封电子邮件。 虽然从长远来看这可能不是最佳解决方案。


如果这些答案都不起作用,有办法通过一个连接向SendGrid发送大量电子邮件:SMTP。但是,这需要删除SendGrid Node Library并将其替换为NodeMailer(或其他一些SMTP库)。

默认情况下,NodeMailer会保持连接处于打开和活动状态,因此您可以在一个事务中发送多封电子邮件。为此,您可以执行以下操作:

var nodemailer = require("nodemailer");

// Create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "SendGrid",
    auth: {
        user: "your_username",
        pass: "your_password"
    }
});

// Let get the users you want to send email to
var users = getAllUsersAsArray();

// Loop through your users
users.forEach(function (user){

    // Setup the message
    var mailOptions = {
        from: "You <you@example.com>",
        to: user.email,
        subject: subjectTemplate.render(user),
        text: textTemplate.render(user),
        html: htmlTemplate.render(user)
    }

    // Send mail
    smtpTransport.sendMail(mailOptions, function(error, response){
        if(error){
            console.log(error);
        }else{
            console.log("Message sent: " + response.message);
        }
    });

});

如果您仍然需要利用SendGrid SMTPAPI的部分功能,可以使用SMTPAPI Node.js library并将其结果插入到邮件标题中。

var mailOptions = {
    from: "You <you@example.com>",
    to: user.email,
    // Assuming you've created an smtpapi header instance named header
    headers: header.jsonString(),
    subject: subjectTemplate.render(user),
    text: textTemplate.render(user),
    html: htmlTemplate.render(user)
}