使用nodemailer和gmail发送多重电子邮件

时间:2017-01-12 20:01:05

标签: javascript node.js gmail nodemailer

我正在尝试向多个收件人发送电子邮件(约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帐户来做到这一点!

提前致谢!

2 个答案:

答案 0 :(得分:0)

来自Gmail: 421 SMTP服务器错误:并发会话太多

您可以区别对待发送:

  • 等待关闭每次发送之间的会话

  • 通过邮件发送

最好的方法是在同一时间内不超过10个会话的限制:)

答案 1 :(得分:0)

这是因为您试图为每个电子邮件创建一个新的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();