我查看了SendGrid API文档,但未发现发送批量预呈现电子邮件的可能性。这可能吗?
我想要做的是使用我自己的模板引擎呈现单个电子邮件内容,然后将这些内容(包括收件人,主题和邮件正文)作为批量上传到SendGrid系统。
我可以毫无问题地发送交易邮件,但目前对于大量邮件来说速度太慢。
我目前正在使用Node.js库https://github.com/sendgrid/sendgrid-nodejs
答案 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)
}