Чего я хочу добиться, так это того, что когда я ввожу почтовый маршрут, я хочу отправить электронное письмо через 10 минут. Для этого я использую node-cron. Но это расписание не отправляет почту через 10 минут. Я полагаю, что это устанавливает его, когда сама минута составляет 10, а почта отправляется? Как я могу добиться, чтобы при вводе маршрута почта отправлялась через 10 минут один раз?
cron.schedule("10 * * * *", function(){
const mailOptions = {
from: '[email protected]', // sender address
to: '[email protected]', // list of receivers
subject: 'Test | ' + newadvertisement.manufacturer + ' ' + newadvertisement.brand, // Subject line
html: '<p>Test
};
transporter.sendMail(mailOptions, function (err, info) {
if (err)
console.info(err)
else
console.info(info);
});
});
P.S. мой код работает без node-cron. Также я не получаю ошибок.
@Avihaym Как вы думаете, это хороший метод?
Конечно... вам не нужен cron.
Но у меня также есть шесть групп пользователей. И для каждой группы пользователей должно быть отправлено одно и то же электронное письмо. Для первой группы через 10 мин, для второй группы через 20 мин. и т. д. Шесть setTimeouts все еще надежны? @Авихайм
Вы можете установить время как переменную и изменить его в соответствии с группой.
Как упоминалось ниже, cron — это не то, что вам нужно, если вы хотите отправить почту только один раз. Также для setTimeout(): это жизнеспособное решение, но имейте в виду, что если ваш сервер остановится или выйдет из строя по какой-либо причине во время тайм-аута, письма будут отправлены нет.
@Enslev Хорошо, я буду использовать setTimeout. Если почта однажды не будет отправлена, это не большая проблема;)





Так работает крон. вики для дальнейшего чтения. TL;DR: как вы сказали, он будет отправлять почту каждый, когда время составляет 10 минут после часа, а не только один раз.
Для того, что вы хотите, вы можете сделать простой установить время ожидания () с задержкой 600000 (1000 мс * 60 секунд * 10 минут).
Или вы можете использовать повестка дня для гораздо большего контроля над тем, когда он действует. Для этого требуется какая-то база данных, но это более надежно, поскольку setTimeout() не будет работать, если сервер будет перезапущен после установленного времени ожидания.
Я считаю, что прямо сейчас он отправляет каждый час, вечность, когда минута = 10
Если вы хотите использовать cron для этого, вам нужно установить значение вместо этих звездочек:
cron.schedule("40 16 28 Feb Thu",
Однако, если это одноразовое действие, вместо этого вы можете использовать тайм-ауты.
setTimeout(sendEmail(),600000);
Почему бы не использовать setTimeout?