Я хочу проанализировать электронную почту и найти пакет mailparser. (установил с помощью "npm install mailparser"). Я использую Windows 7. Я пытаюсь запустить простой пример, но событие «конец» не вызывается, и я не вижу никаких журналов. вот что я бегу:

const MailParser = require("mailparser").MailParser;
const mailparser = new MailParser({debug: true});

let email = "From: 'Sender Name' <sender@example.com>\r\n"+
    "To: 'Receiver Name' <receiver@example.com>\r\n"+
    "Subject: Hello world!\r\n"+
    "\r\n"+
    "How are you today?";

// setup an event listener when the parsing finishes
mailparser.on("end", function(mail_object){
    console.log("From:", mail_object.from); //[{address:'sender@example.com',name:'Sender Name'}]
    console.log("Subject:", mail_object.subject); // Hello world!
    console.log("Text body:", mail_object.text); // How are you today?
});

// send the email source to the parser
mailparser.write(email);
mailparser.end();

Что я делаю неправильно? Спасибо

4
Yoni Mayer 7 Июл 2017 в 11:20
У меня была такая же начальная проблема. Вы установили неправильную библиотеку mailparser. Вам необходимо установить mailparser-mit, чтобы это работало.
 – 
Charles Saag
28 Май 2018 в 18:15

2 ответа

Лучший ответ

Согласно прекрасному руководству, есть только два события: headers и data .

Возможно, проще всего использовать simpleParser вместо нижнего уровня (event- управляемый) MailParser:

const simpleParser = require('mailparser').simpleParser;
...
simpleParser(email).then(function(mail_object) {
  console.log("From:", mail_object.from.value);
  console.log("Subject:", mail_object.subject);
  console.log("Text body:", mail_object.text);
}).catch(function(err) {
  console.log('An error occurred:', err.message);
});
5
robertklep 7 Июл 2017 в 11:40

Похоже, OP спрашивал о mazira / mailparser-mit, который является ответвлением более популярный nodemailer / mailparser.

Основная ветвь mailparser с тех пор снова переключилась на лицензию MIT, а вилка mailparser-mit не обновлялась в течение двух лет с момента написания этой статьи.

Вот пример для начала работы с классом нижнего уровня MailParser из пакета mailparser:

const {MailParser} = require('mailparser') // v3.0.1
const {createReadStream} = require('fs')

const parseEmail = async (readableStream) =>
  new Promise((resolve, reject) =>
    readableStream
      .pipe(new MailParser())
      .on('headers', (headers) => console.log('headers', headers))
      .on('data', (data) => console.log('data', data))
      .on('error', reject)
      .on('end', resolve),
  )

parseEmail(createReadStream('emails/test1.eml'))
0
Mike Fogel 20 Янв 2021 в 22:40