Javascript NodeJS为nodeEmailer设置超时
制作一张小纸条,从另一个文件中获取电子邮件列表。然后使用forEach使用nodeEmailer的邮件功能向他们每个人发送电子邮件。我的问题是我想在每次发送电子邮件之间有一个超时。我已经尝试了几件事,但我完全被卡住了。如果有人能帮我一把。这是我第一个尝试编写lol的项目Javascript NodeJS为nodeEmailer设置超时,javascript,node.js,Javascript,Node.js,制作一张小纸条,从另一个文件中获取电子邮件列表。然后使用forEach使用nodeEmailer的邮件功能向他们每个人发送电子邮件。我的问题是我想在每次发送电子邮件之间有一个超时。我已经尝试了几件事,但我完全被卡住了。如果有人能帮我一把。这是我第一个尝试编写lol的项目 'use strict'; const nodemailer = require('nodemailer'); var fs = require('fs'); //------------------------
'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);
});
“严格使用”;
const nodemailer=require('nodemailer');
var fs=需要('fs');
//--------------------------------------------------------------------------
//装载受害者
//--------------------------------------------------------------------------
var-victors=fs.readFileSync('./victors.txt',utf8').split(“\r\n”);
var letter=fs.readFileSync('./letter.txt',utf8');
forEach(函数(项、索引、数组){
让transporter=nodeEmailer.createTransport({
普尔:没错,
maxConnections:1,
maxMessages:1,
差饷租值:3000,
差饷限额:1,
主持人:“mail.asrebaziemast.com”,
港口:587,
安全:false,//对于465为true,对于其他端口为false
tls:{
//不要在无效证书上失败
拒绝:错误
},
认证:{
用户:“a1@asrebaziemast.com“,//生成的ethereal用户
通过:“D@gician#d21//生成的以太密码
}
});
让邮件选项={
发件人:“‘Freddy Mang’,//发件人地址
收件人:项,//收件人列表
主题:“你好✔', // 主题行
html:letter,//html正文
编码:“base64”
};
setTimeout(函数(){
transporter.sendMail(邮件选项,(错误,信息)=>{
如果(错误){
返回console.log(错误);
}
console.log('发送的消息:%s',info.messageId,项);
});
}, 5000);
});
此处所需的是费率限制
/费率增量
选项,问题是您正在为每封电子邮件创建一个新的transporter实例
将传输创建移到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);
});
});
const transporter=nodeEmailer.createTransport({
普尔:没错,
maxConnections:1,
maxMessages:1,
差饷租值:3000,
差饷限额:1,
主持人:“mail.asrebaziemast.com”,
港口:587,
安全:false,//对于465为true,对于其他端口为false
tls:{
//不要在无效证书上失败
拒绝:错误
},
认证:{
用户:“a1@asrebaziemast.com“,//生成的ethereal用户
通过:“D@gician#d21//生成的以太密码
}
});
受害者。forEach(项目=>{
发送邮件({
发件人:“‘Freddy Mang’,//发件人地址
收件人:项,//收件人列表
主题:“你好✔', // 主题行
html:letter,//html正文
编码:“base64”
},(错误,信息)=>{
如果(错误){
返回console.log(err);
}
console.log('发送的消息:%s',info.messageId,项);
});
});
尝试使用rateLimit和rateDelta,如您所见,使其尝试每两秒钟只发送一条消息,但仍然无法使其正常工作。我相信这与我需要添加“承诺”有关,但只是不太熟悉而已。如果有人能给我指点方向,告诉我应该研究什么,学会如何正确处理这种情况,那该有多酷呢。我很感激。所以,为了正确理解你,你想把电子邮件排成队列,在前一次邮件发送后5秒发送出去吗?你这么做有什么特别的原因吗?我想要一个超时时间,因为很多SMTP提供商不喜欢群发电子邮件,并且每小时给你一定数量的电子邮件限制等等?认真地你在发垃圾邮件吗?哇哦,受害者们,我真的很感激,但我相信这一点。它不是控制台。记录为发送的消息,我可以查看它是否停止。非常感谢您的帮助,所以我开始质疑配置和/或数据是否准确。你能给我看一段受害者的样子吗?哦,不,它正在发送电子邮件。这不是控制台日志记录。@NoxBin我确实在回调中有一个输入错误,我已经纠正了,这可能就是问题所在。