@DefaultX

Как получить mail.ru рассылки в IMAP?

Приветствую всех.

Пытаюсь получить письма с почты mail.ru используя imap протокол (либа - emailjs-imap-client), письма получаются только из папки входящих, но если письмо попадает в рассылки то данное письмо не возвращается.

Пример кода
const ImapClient = require('emailjs-imap-client').default;

(async () => {
    // Initialize imap client
    const client = new ImapClient('imap.mail.ru', 993, {
        logLevel: 1000,
        auth: {
            user: '',
            pass: ''
        }
    });

    // Handling imap mail error
    client.onerror = (err) => {
        throw new Error(`Error IMAP handling: ${err}`);
    };

    // Create mail connection
    await client.connect();

    // Getting messages on mail
    const listMessages = await client.listMessages('INBOX', '1:*', ['uid', 'flags', 'envelope', 'body[]']);

    for (const message of listMessages) {
        const messageDate = new Date(message.envelope.date);
        const messageSubject = message.envelope.subject;
        const messageBody = message['body[]'];

        console.log(messageSubject);
    }

    // Close mail connection
    await client.close();
})();
  • Вопрос задан
  • 905 просмотров
Решения вопроса 1
akelsey
@akelsey
Ну вот не будучи программистом я вижу что вы получаете айтемы только из инбокса:
const listMessages = await client.listMessages('INBOX', '1:*', ['uid', 'flags', 'envelope', 'body[]']);

Наверное нужно переписать код что бы тот рекурсивно обходил все папки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vlad_IT
@Vlad_IT
Front-end разработчик
Как выше правильно заметил akelsey, вы получаете почту только с ящика INBOX, чтобы получить почту со всех ящиков, нужно получить все эти ящики, и для них отдельно грести письма.
Вот так я вывел список ящиков
client.listMailboxes().then((mailboxes) => { console.warn(mailboxes); })

и получил вот такой ответ
Список ящиков
{ root: true,
  children:
   [ { name: 'INBOX',
       delimiter: '/',
       path: 'INBOX',
       children: [Array],
       flags: [Array],
       listed: true },
     { name: 'Нежелательная почта',
       delimiter: '/',
       path: '&BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &BD8EPgRHBEIEMA-',
       children: [],
       flags: [],
       listed: true },
     { name: 'Нужное',
       delimiter: '/',
       path: '&BB0EQwQ2BD0EPgQ1-',
       children: [],
       flags: [],
       listed: true },
     { name: 'Спам',
       delimiter: '/',
       path: '&BCEEPwQwBDw-',
       children: [],
       flags: [Array],
       listed: true,
       specialUse: '\\Junk' },
     { name: 'Отправленные',
       delimiter: '/',
       path: '&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-',
       children: [],
       flags: [Array],
       listed: true,
       specialUse: '\\Sent',
       specialUseFlag: '\\Sent' },
     { name: 'Черновики',
       delimiter: '/',
       path: '&BCcENQRABD0EPgQyBDgEOgQ4-',
       children: [],
       flags: [Array],
       listed: true,
       specialUse: '\\Drafts',
       specialUseFlag: '\\Drafts' },
     { name: 'Корзина',
       delimiter: '/',
       path: '&BBoEPgRABDcEOAQ9BDA-',
       children: [],
       flags: [Array],
       listed: true,
       specialUse: '\\Trash',
       specialUseFlag: '\\Trash' } ] }

Там много чего интересного. Вам же нужен параметр path, его вы и должны подставлять вместо INBOX.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы