Как я могу получать входящую почту (gmail) на мой сервер приложений с помощью imap (nodejs) - PullRequest
2 голосов
/ 16 июня 2020

Я хотел бы прочитать всю входящую почту с помощью imap. Но imap уведомляет меня только о количестве новых писем, которые я получил

 imap.on('mail', (number) => {
      console.log('got mails', number);
    });

Есть ли способ прочитать входящие письма?

Любая помощь будет благодарна

1 Ответ

1 голос
/ 16 июня 2020
  1. Взгляните на Node.js Quickstart , он вам очень поможет.
  2. Используйте Users.messages: list для получения идентификаторов почты , вот прямая ссылка Попробуйте этот API
  3. Получив список адресов электронной почты , вы можете использовать Users.messages: get
  4. Взгляните на получение отправленных писем из Gmail imap используя nodejs

Вот пошаговое руководство, как получить свой почтовый ящик:

  1. Включить IMAP
  2. Включить менее безопасные приложения
  3. Установите пакет imap с npm install imap
  4. Создайте index. js со следующим кодом:
const Imap = require('imap'), inspect = require('util').inspect;

const myMail = "***@gmail.com";
const myPwd = "***";

let getEmailFromInbox = (mailServer) => {

  mailServer.openBox('INBOX', true, function (err, box) {

    if (err) throw err;

    let f = mailServer.seq.fetch('1:*', {
      bodies: 'HEADER.FIELDS (FROM TO SUBJECT DATE)',
      struct: true
    });

    f.on('message', function (msg, seqno) {
      console.log('Message #%d', seqno);
      let prefix = '(#' + seqno + ') ';

      msg.on('body', function (stream, info) {
        let buffer = '';

        stream.on('data', function (chunk) {
          buffer += chunk.toString('utf8');
        });

        stream.once('end', function () {
          console.log(prefix + 'Parsed header: %s', inspect(Imap.parseHeader(buffer)));
        });

      });

    });

    f.once('error', function (err) {
      console.log('Fetch error: ' + err);
    });

    f.once('end', function () {
      console.log('Done fetching all messages!');
    });

  });

}

let createLabel = (mailServer, labelName) => {
  mailServer.addBox(labelName, (err) => {});
  console.log('message', 'New Label or Box Created');
}

let getMailboxStatusByName = (mailServer, inboxName) => {
  mailServer.status(inboxName, (err, mailbox) => {
    console.log('message', mailbox);
  });
  console.log('message', 'Label or Box Status');
}

let getMailBoxLabels = (mailServer) => {
  mailServer.getBoxes((error, mailbox) => {
    console.log('message', mailbox);
  })
}

let deleteLabel = (mailServer, labelName) => {
  mailServer.delBox(labelName, (error) => {})
  console.log('message', 'Label or Box removed');
}

let mailServer1 = new Imap({
  user: myMail,
  password: myPwd,
  host: 'imap.gmail.com',
  port: 993,
  tls: true,
  tlsOptions: {
    rejectUnauthorized: false
  },
  authTimeout: 3000
}).once('error', function (err) {
  console.log('Source Server Error:- ', err);
});
mailServer1.once('ready', function () {
  mailServer1.openBox('INBOX', true, function (err, box) {
    if (err) throw err;
    console.log('message', 'server1 ready');
  });

  // mail operation
  //getMailBoxLabels(mailServer1);
  getEmailFromInbox(mailServer1)
  //createLabel(mailServer1, "demo-label1");
  //deleteLabel(mailServer1, "demo-label1");
  //getMailboxStatusByName(mailServer1, "INBOX");
})

mailServer1.connect();

запустите node index.js и проверьте вывод почты

адаптируйте этот фрагмент под свои нужды

...