NodeJS Установка тайм-аута для nodemailer

Сделал небольшой скрипт, который берет список писем из другого файла. Затем используйте 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); 

});

Пытался использовать rateLimit и rateDelta, а также, как вы можете видеть, попытаться отправить только 1 сообщение за пару секунд, но все равно не смог заставить это работать. Я считаю, что это как-то связано с тем, что мне нужно добавить «обещания», но я просто не слишком хорошо с ними знаком. Что было бы действительно круто, если бы кто-нибудь мог направить меня по пути и сказать, что я должен исследовать и чему научиться, чтобы правильно справляться с этой ситуацией. Я ценю это.

Nox Bin 19.11.2018 01:27

Итак, чтобы правильно вас понять - вы хотите поставить в очередь электронные письма, чтобы отправлять их на 5 секунд после предыдущего? Какая-то конкретная причина, почему вы это делаете?

James 19.11.2018 01:36

Мне нужен был тайм-аут, потому что многие провайдеры SMTP не любят массовые рассылки и дают вам определенное количество писем в час и т. д.

Nox Bin 19.11.2018 01:42

жертвы? шутки в сторону? вы рассылаете спам? ржу не могу

KBIIX 19.11.2018 02:36

вау, жертвы, я не могу это оценить, но вау

user10415043 19.11.2018 10:18

Помог ли мой ответ решить вашу проблему?

James 25.01.2019 05:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
1 681
1

Ответы 1

Здесь вам нужны опции 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);
  });
});

Пробовал. Это не консоль. Ведение отправленного сообщения, я могу видеть, останавливается оно или нет. Я очень ценю вашу помощь.

Nox Bin 19.11.2018 02:08

@NoxBin, поэтому я бы начал сомневаться в том, точны ли конфигурация и / или данные. Можете ли вы показать отрывок того, как выглядит victims.txt?

James 19.11.2018 09:44

О нет, это отправка электронного письма. это просто не консольное ведение журнала.

Nox Bin 19.11.2018 09:56

@NoxBin У меня была опечатка в обратном вызове, которую я исправил, проблема была в мая.

James 19.11.2018 10:03

Другие вопросы по теме