@Mr-Governor
Губернирую

Как получить список писем в Node.js?

Возникла задача реагировать на входящие письма.
Думал решить путем получения списка непрочитанных писем, для отправки использую nodemailer, но не нашел в нем функционала для просмотра списка.

Подскажите пожалуйста, каким образом в Node.js можно реализовать почтовый клиент (с возможностью чтения писем)?
  • Вопрос задан
  • 336 просмотров
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
так
https://www.npmjs.com/package/node-pop3
const list = await pop3.UIDL();
console.dir(list);
/**
 * [
 *  ['1', 'ZC0113-H8wi_YChVab4F0QTbwP4B6i'],
 *  ['2', 'ZC0114-3A9gAn8M2Sp1RhVCGTIII6i'],
 *  ...
 * ]
*/
Ответ написан
vajarkov
@vajarkov
Backend Developer
Нашел решение, надо просто вместо пароля от ящика вставить пароль для внешних приложений и все заработало. У меня стоит Imap, но для pop3 думаю примерно так же будет работать судя по описанию на Mail.RU

Пришло письмо c ИВЦ [object Object]
C:\Users\VASHDO~1\AppData\Local\Temp\epls9005.txt
Not file name
EXIT
К письму не приложенны файлы для разбора [ { address: 'finance@cleanf.ru', name: 'Статус - Пополнение' } ]
К письму не приложенны файлы для разбора [ { address: 'security@id.mail.ru', name: 'Mail.ru' } ]
Message #1262
Message #4994
К письму не приложенны файлы для разбора [ { address: 'promo@chitai-gorod.ru', name: 'Читай-город' } ]
Message #1263
Message #1264
К письму не приложенны файлы для разбора [ { address: 'info@i-on.ru', name: 'НОУ-ХАУ' } ]
К письму не приложенны файлы для разбора [ { address: 'support@zaymot.ru', name: 'Возврат средств' } ]
К письму не приложенны файлы для разбора [ { address: 'security@id.mail.ru', name: 'Mail.ru' } ]
Message #1265
Message #4995
Message #1266
Message #1267
Message #4996
ZIbraimova@alseco.kz
UNARCHIVE
Пришло письмо c ALSECO [object Object]


$ yarn start
yarn run v1.22.19
$ ts-node ./src/index.ts
FETCH [
  16933, 16934, 16935, 16936, 16937, 16938, 16939, 16940,
  16941, 16942, 16943, 16944, 16945, 16946, 16947, 16948,
  16949, 16950, 16951, 16952, 16953, 16954, 16955, 16956,
  16957, 16958, 16959, 16960, 16961, 16962, 16963, 16965,
  16966, 16967, 16968, 16969, 16970, 16971, 16972, 16973,
  16974, 16975, 16976, 16977, 16978, 16979, 16980, 16981,
  16982, 16983, 16984, 16985, 16986, 16987, 16988, 16989,
  16990, 16991, 16992, 16993, 16994, 16995, 16996, 16997,
  16998, 16999, 17000, 17001, 17002, 17003, 17004, 17005,
  17006, 17008, 17009, 17010, 17011, 17012, 17013, 17014,
  17015, 17016, 17017, 17018, 17019, 17020, 17021, 17022,
  17023, 17024, 17025, 17026, 17027, 17028, 17029, 17030,
  17031, 17032, 17033, 17034,
  ... 242 more items
]
FETCH [
  6912, 6913, 6914, 6915, 6916, 6917, 6919, 6920, 6922, 6923,
  6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933,
  6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943,
  6944, 6945, 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953,
  6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963,
  6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6973, 6974,
  6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984,
  6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6994,
  6995, 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004,
  7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014,
  ... 48 more items
]
NOTHING
Message #1255
Message #1256
Message #1257
mvika@ivc.kz
Пришло письмо c ИВЦ [object Object]


Сам код примерно такой

addAccount(address, host, port, login, password, tls, format, token) {
        const acc = new ImapConnection( {
            user: login,
            password: token,
            host,
            port,
            tls
        });
        acc.format = format
        this.accounts.push(acc)
    }

    exec() {
        this.accounts.forEach(acc => {
            acc.connect()
            acc.on('ready', _ => {
                acc.openBox("INBOX", false, _ => {
                    //this.parseMail(null, acc)
                })

            })
            acc.on('mail', id => {
                this.parseMail(id, acc)
            })
        });
    }


Извиняюсь, что без редакции, но просто получилось, что и хотел, там дальше с обработкой самих писем разбираться надо, поэтому второпях.

Если надо на POP3 переделать, то оно делается примерно аналогично, код могу примерный набросать, если кому надо. Могу поделиться тем, что уже написано, чтобы переделать под себя
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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