Javascript NodeJS为nodeEmailer设置超时

Javascript NodeJS为nodeEmailer设置超时,javascript,node.js,Javascript,Node.js,制作一张小纸条,从另一个文件中获取电子邮件列表。然后使用forEach使用nodeEmailer的邮件功能向他们每个人发送电子邮件。我的问题是我想在每次发送电子邮件之间有一个超时。我已经尝试了几件事,但我完全被卡住了。如果有人能帮我一把。这是我第一个尝试编写lol的项目 'use strict'; const nodemailer = require('nodemailer'); var fs = require('fs'); //------------------------

制作一张小纸条,从另一个文件中获取电子邮件列表。然后使用forEach使用nodeEmailer的邮件功能向他们每个人发送电子邮件。我的问题是我想在每次发送电子邮件之间有一个超时。我已经尝试了几件事,但我完全被卡住了。如果有人能帮我一把。这是我第一个尝试编写lol的项目

        '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我确实在回调中有一个输入错误,我已经纠正了,这可能就是问题所在。