Я хотел бы проверять электронную почту каждые T минут, используя модуль imap для NodeJS. Поэтому я установил таймер:
_pollingTimer = setInterval(receiveEmails, constants.POLLING_TIME * 60 * 1000); // POLLING_TIME minutes polling
, тогда как функция receiveEmails
выглядит следующим образом:
function receiveEmails() {
const imap = new Imap({
user: user_name,
password: user_pwd,
host: host_name,
port: host_port_imap,
tls: true
});
imap.once('ready', function () {
imap.openBox('INBOX', false, function (err, box) { //false means write enable
if (err) throw err;
imap.search(['UNSEEN'], function (err, results) {
if (err) throw err;
else if (!results || !results.length) {
logger.debug(`No new messages on the INBOX`);
}
else {
var f = imap.fetch(results, { bodies: ''});
f.on('message', _processMessage);
f.once('error', function (err) { console.log('Fetch error: ' + err); });
f.once('end', function() {
logger.debug(`Done fetching all messages!`);
imap.end();
});
}
});
});
});
imap.once('error', function (err) {
logger.error(`${err}`);
});
imap.once('end', function () {
logger.debug(`IMAP connection ended`);
});
imap.connect();
}
, но при многократном вызове этой функции возвращается ошибка входа в систему , Кажется, это связано с несколькими попытками входа в систему.
Я попытался объявить переменную imap вне функции, но ничего не изменилось.
Итак, как я могу периодически проверять наличие новых писем, избегая переподключений?