javascript - NodeJS为nodemailer设置超时
问题描述
制作了一个小脚本,可以从另一个文件中获取电子邮件列表。然后使用 forEach 使用 nodemailer 中的邮件功能向他们每个人发送电子邮件。我的问题是我希望在发送的每封电子邮件之间有一个超时。我已经尝试了几件事,但我只是被卡住了。如果有人可以帮我一把。这是我第一个尝试编写代码的项目。
'use strict';
const nodemailer = require('nodemailer');
var fs = require('fs');
//--------------------------------------------------------------------------
// Load Victims
//--------------------------------------------------------------------------
var victims = fs.readFileSync('./victims.txt', 'utf8').split("\r\n");
var letter = fs.readFileSync('./letter.txt', 'utf8');
victims.forEach(function(item, index, array) {
let transporter = nodemailer.createTransport({
pool: true,
maxConnections: 1,
maxMessages: 1,
rateDelta: 3000,
rateLimit: 1,
host: 'mail.asrebaziemast.com',
port: 587,
secure: false, // true for 465, false for other ports
tls: {
// do not fail on invalid certs
rejectUnauthorized: false
},
auth: {
user: "a1@asrebaziemast.com", // generated ethereal user
pass: "D@gician#d21" // generated ethereal password
}
});
let mailOptions = {
from: '"Freddy Mang" <a1@asrebaziemast.com>', // sender address
to: item, // list of receivers
subject: 'Hello ✔', // Subject line
html: letter, // html body
encoding: 'base64'
};
setTimeout(function () {
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId, item);
});
}, 5000);
});
解决方案
rateLimit
/rateDelta
选项是您想要的,问题是您正在为每封电子邮件创建一个新的传输器实例。
将传输创建移到外部forEach
以重用相同的实例,例如
const transporter = nodemailer.createTransport({
pool: true,
maxConnections: 1,
maxMessages: 1,
rateDelta: 3000,
rateLimit: 1,
host: 'mail.asrebaziemast.com',
port: 587,
secure: false, // true for 465, false for other ports
tls: {
// do not fail on invalid certs
rejectUnauthorized: false
},
auth: {
user: "a1@asrebaziemast.com", // generated ethereal user
pass: "D@gician#d21" // generated ethereal password
}
});
victims.forEach(item => {
transporter.sendMail({
from: '"Freddy Mang" <a1@asrebaziemast.com>', // sender address
to: item, // list of receivers
subject: 'Hello ✔', // Subject line
html: letter, // html body
encoding: 'base64'
}, (err, info) => {
if (err) {
return console.log(err);
}
console.log('Message sent: %s', info.messageId, item);
});
});
推荐阅读
- c++ - 执行特征实现细节
- node.js - 如果验证失败,如何停止路由到给定的路由
- python - 使用 conda 指定特定 python 可执行文件的路径
- google-play - Google Play 商店是否要求用户提供付款方式?
- xml - Python3:解析 xml 以获取具有特定孙子的孩子
- dsl - 哪个工具提供了创建文本外部 DSL 以进行简单代码翻译的最简单方法?
- matlab - 如果等于 1,则更改对角线值
- javascript - 根据其他元素调整高度
- c++ - flex/bison 从 C++ 中的扫描仪返回一个字符标记
- javascript - 具有相同键值数据的对象