簡體   English   中英

使用nodemailer和gmail發送多電子郵件

[英]Send multipe emails using nodemailer and gmail

我正在嘗試向多個收件人(約3.000)發送電子郵件。 所有電子郵件都存儲在我的數據庫(Mongo)中。 因此,我進行查詢以返回所有電子郵件地址,並使用async發送所有電子郵件,例如:

    function _sendEmail(params, callback) {
    async.each(params.email, function(user, cb) {
        const mailOptions = {
            from: sender
            to: user,
            subject: Subject,
            text: 'Hello Word',
        };
        app.transporter.sendMail(mailOptions, function(err, response) {
            if(err) console.log(err);
            else console.log(response);
            cb();
        });
    }, callback);
}

我正在app.js中創建nodemailer transporte,如下所示:

    const transporter = nodemailer.createTransport(smtpTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        user: senderMail,
        pass: senderMailPassword
    }
}));

當我嘗試僅將其發送到10個郵件時,它工作正常,但是當我嘗試將其發送到數據庫中的所有電子郵件時,卻多次出現此錯誤:

{ [Error: Data command failed: 421 4.7.0 Temporary System Problem.  Try again later (WS). g32sm7412411qtd.28 - gsmtp]
  code: 'EENVELOPE',
  response: '421 4.7.0 Temporary System Problem.  Try again later (WS). g32sm7412411qtd.28 - gsmtp',
  responseCode: 421,
  command: 'DATA' }

我想念什么嗎? 我是否需要設置一些內容以便能夠在短時間內發送大量郵件? 我正在使用一個Gmail帳戶來做到這一點!

提前致謝!

來自Gmail:421 SMTP服務器錯誤:並發會話過多

您可以用不同的方式處理發送:

  • 等待關閉每次發送之間的會話

  • 通過一堆郵件發送

最好的方法是設法同時不要超過10個會話的限制:)

這是因為您試圖為每個電子郵件創建一個新的smtp連接。 您需要使用SMTP池。 當您有大量要批量發送的消息,或者您的提供程序僅允許使用少量並行連接時,池化smtp最為有用。

const transporter = nodemailer.createTransport(smtpTransport({
host: 'smtp.gmail.com',
port: 465,
pool: true, // This is the field you need to add
secure: true,
auth: {
    user: senderMail,
    pass: senderMailPassword
}

}));

您可以關閉游泳池

transporter.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM