如何正确地发送电子邮件和关闭节点邮件中的smtp连接?



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

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

当我使用下面的代码应用程序时,只发送 10 封电子邮件,然后引发错误Error: Invalid greeting. response=421 4.7.0 mailrelay1.***.** Error: too many connections from 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 = nodemailer.createTransport({
pool: true,
host: process.env.SMTP_HOST,
port: parseInt(process.env.SMTP_PORT, 10),
secure: false,
tls: {
rejectUnauthorized: false
}
});

最新更新