Javascript 如何在NodeEmailer中正确发送电子邮件并关闭smtp连接?

Javascript 如何在NodeEmailer中正确发送电子邮件并关闭smtp连接?,javascript,node.js,smtp,nodemailer,Javascript,Node.js,Smtp,Nodemailer,在我的Node.js应用程序中,我使用库通过SMTP发送电子邮件 正如您可以从代码中看到的,我有一个名为employees的数组。该阵列有2000个电子邮件地址 当我使用下面的代码时,应用程序只发送10封电子邮件,然后引发错误error:Invalid greeting。response=421 4.7.0 mailrelay1.*.*.*错误:来自xxx.xx.xx.xxx的连接太多 在我看来,每个发送操作都不会关闭通道,即使我明确指定了.close()方法 const express = r

在我的
Node.js
应用程序中,我使用库通过
SMTP
发送电子邮件

正如您可以从代码中看到的,我有一个名为
employees
的数组。该阵列有2000个电子邮件地址

当我使用下面的代码时,应用程序只发送10封电子邮件,然后引发错误
error:Invalid greeting。response=421 4.7.0 mailrelay1.*.*.*错误:来自xxx.xx.xx.xxx的连接太多

在我看来,每个发送操作都不会关闭通道,即使我明确指定了
.close()
方法

const express = require('express');
const nodemailer = require('nodemailer');
const forAsync = require('for-async');

let transporter = nodemailer.createTransport({
    host: process.env.SMTP_HOST,
    port: parseInt(process.env.SMTP_PORT, 10),
    secure: false,
    tls: {
        rejectUnauthorized: false
    }
});

const router = express.Router();

router.post('/employees', function(request, response) {
    const employees = [***];

    forAsync(employees, (employee) => {
        return new Promise(resolve => {
            // Setup email options.
            const options = {
                from: process.env.EMAIL,
                to: employee,
                subject: "System Alert",
                html: html
            };

            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    transporter.sendMail(options, (error) => {
                        if(error) {
                            console.log(error);
                            reject(error);
                        } else {
                            resolve();
                        }
                   });

                   transporter.close();
                }, 5000);
            }).then(() => {
                resolve();
            }).catch(error => {
                console.log(error);
            });

        });

    });

});

您可能需要考虑发送一封电子邮件

要执行此操作,请在创建传输时切换:

let transporter=nodeEmailer.createTransport({
普尔:没错,
主机:process.env.SMTP_主机,
端口:parseInt(process.env.SMTP_端口,10),
安全:错误,
tls:{
拒绝:错误
}
});

您可能需要考虑发送电子邮件

要执行此操作,请在创建传输时切换:

let transporter=nodeEmailer.createTransport({
普尔:没错,
主机:process.env.SMTP_主机,
端口:parseInt(process.env.SMTP_端口,10),
安全:错误,
tls:{
拒绝:错误
}
});

你好!我添加了您推荐的选项。不幸的是,我看到了以下错误:
错误:连接池已关闭
。在那个错误之后,我删除了
transporter.close()我以前用过的。在10封电子邮件之后,我终于看到了这样的错误:
错误:Mail命令失败:450 4.7.1错误:来自xxx.xx.xxx.xxx的邮件过多
。似乎删除
transporter.close()
行是池正常工作所必需的。似乎还有其他与来自单个IP的请求速率相关的限制。尝试使用其他选项来匹配您面临的限制。我尝试使用不同的选项。不幸的是,他们都没有帮助我。如果我无法访问SMTP服务器,则只有
RabbitMQ
可以帮助我了解我的意见。你有什么想法吗?你好!我添加了您推荐的选项。不幸的是,我看到了以下错误:
错误:连接池已关闭
。在那个错误之后,我删除了
transporter.close()我以前用过的。在10封电子邮件之后,我终于看到了这样的错误:
错误:Mail命令失败:450 4.7.1错误:来自xxx.xx.xxx.xxx的邮件过多
。似乎删除
transporter.close()
行是池正常工作所必需的。似乎还有其他与来自单个IP的请求速率相关的限制。尝试使用其他选项来匹配您面临的限制。我尝试使用不同的选项。不幸的是,他们都没有帮助我。如果我无法访问SMTP服务器,则只有
RabbitMQ
可以帮助我了解我的意见。你有什么想法吗?