【问题标题】:node.js: mailparser not workingnode.js:邮件解析器不工作
【发布时间】:2017-12-11 11:09:14
【问题描述】:

我想解析一封电子邮件并找到了 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();

我做错了什么? 谢谢

【问题讨论】:

  • 我最初遇到了同样的问题。您安装了错误的邮件解析器库。您需要安装 mailparser-mit 才能正常工作。

标签: node.js email-parsing


【解决方案1】:

看起来 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'))

【讨论】:

    【解决方案2】:

    根据the fine manual,只有两个事件:headers 和data。

    也许使用simpleParser 而不是较低级别(事件驱动)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);
    });
    

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多