Сделал небольшой скрипт, который берет список писем из другого файла. Затем используйте forEach, чтобы использовать функцию mail от nodemailer, чтобы отправить электронное письмо каждому из них. Моя проблема в том, что я хочу иметь тайм-аут между отправкой каждого письма. Я пробовал пару вещей и просто застрял. Если бы кто-нибудь мог мне помочь. Это мой первый проект, в котором я пытаюсь написать код 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: "[email protected]", // generated ethereal user
pass: "D@gician#d21" // generated ethereal password
}
});
let mailOptions = {
from: '"Freddy Mang" <[email protected]>', // 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.info(error);
}
console.info('Message sent: %s', info.messageId, item);
});
}, 5000);
});
Итак, чтобы правильно вас понять - вы хотите поставить в очередь электронные письма, чтобы отправлять их на 5 секунд после предыдущего? Какая-то конкретная причина, почему вы это делаете?
Мне нужен был тайм-аут, потому что многие провайдеры SMTP не любят массовые рассылки и дают вам определенное количество писем в час и т. д.
жертвы? шутки в сторону? вы рассылаете спам? ржу не могу
вау, жертвы, я не могу это оценить, но вау
Помог ли мой ответ решить вашу проблему?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Здесь вам нужны опции 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: "[email protected]", // generated ethereal user
pass: "D@gician#d21" // generated ethereal password
}
});
victims.forEach(item => {
transporter.sendMail({
from: '"Freddy Mang" <[email protected]>', // sender address
to: item, // list of receivers
subject: 'Hello ✔', // Subject line
html: letter, // html body
encoding: 'base64'
}, (err, info) => {
if (err) {
return console.info(err);
}
console.info('Message sent: %s', info.messageId, item);
});
});
Пробовал. Это не консоль. Ведение отправленного сообщения, я могу видеть, останавливается оно или нет. Я очень ценю вашу помощь.
@NoxBin, поэтому я бы начал сомневаться в том, точны ли конфигурация и / или данные. Можете ли вы показать отрывок того, как выглядит victims.txt?
О нет, это отправка электронного письма. это просто не консольное ведение журнала.
@NoxBin У меня была опечатка в обратном вызове, которую я исправил, проблема была в мая.
Пытался использовать rateLimit и rateDelta, а также, как вы можете видеть, попытаться отправить только 1 сообщение за пару секунд, но все равно не смог заставить это работать. Я считаю, что это как-то связано с тем, что мне нужно добавить «обещания», но я просто не слишком хорошо с ними знаком. Что было бы действительно круто, если бы кто-нибудь мог направить меня по пути и сказать, что я должен исследовать и чему научиться, чтобы правильно справляться с этой ситуацией. Я ценю это.