2014-07-11 111 views
1

我檢查了SendGrid API文檔,並沒有發現發送批量預渲染電子郵件的可能性。這可能嗎?是否可以通過SendGrid API發送批量預渲染電子郵件?

我想要做的是使用我自己的模板引擎呈現單個電子郵件內容,然後將這些郵件(包括收件人,主題和郵件正文)作爲批量上傳到SendGrid系統。

我可以發送沒有問題的交易郵件,但對於大量郵件來說,它現在太慢了。

我目前使用Node.js的庫https://github.com/sendgrid/sendgrid-nodejs

+0

每個請求發送多少個收件人?每個請求最多可以發送10k個收件人。 – elbuo

回答

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 <[email protected]>", 
     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 <[email protected]>", 
    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) 
} 
+0

非常感謝您的詳細解答。我認爲SendGrid是一個很棒的服務,並且有很好的文檔。爲什麼我要自己渲染郵件是因爲我需要爲它們添加一些特殊鏈接(由自定義函數生成)。我沒有在文檔中找到有關「自定義功能」的信息。有沒有可能使用這些功能? – Tobi

+0

如果您想爲消息添加自定義鏈接,最好在您的末端生成自定義鏈接,然後通過SMTPAPI和替換標籤將其發送給我們。許多客戶最終這樣做是發送大量半定製消息的一種方式。 **我們目前沒有任何方法在我們的服務器上執行自定義代碼(函數)。** –