如何从 Node.js IMAP 模块中的正文获取纯文本

Posted

技术标签:

【中文标题】如何从 Node.js IMAP 模块中的正文获取纯文本【英文标题】:How to get plain text from body in Node.js IMAP module 【发布时间】:2015-09-16 07:26:33 【问题描述】:

我正在使用 Node.js 的 IMAP 模块来解析 IMAP 电子邮件的正文。我可以将正文作为原始 html 数据返回给我,但这包括标签和其他不必要的数据。我想要输入的文本(删除任何 div、样式等)

这是我目前使用的代码:

openInbox(function(err, box) 
      if (err) throw err;
      var f = imap.seq.fetch(box.messages.total + ':*',  bodies: ['HEADER.FIELDS (FROM)','TEXT'] );
      f.on('message', function(msg, seqno) 
        console.log('Message #%d', seqno);
        var prefix = '(#' + seqno + ') ';
        msg.on('body', function(stream, info) 
          if (info.which === 'TEXT')
            console.log(prefix + '\n\nBody [%s] found, %d total bytes\n\n\n', inspect(info.which), info.size);
          var buffer = '', count = 0;
          stream.on('data', function(chunk) 
            count += chunk.length;
            buffer += chunk.toString('utf8');
            if (info.which === 'TEXT')
              console.log(prefix + 'Body [%s] (%d/%d)', inspect(info.which), count, info.size);
          );
          stream.once('end', function() 
            if (info.which !== 'TEXT')
              console.log(prefix + 'Parsed header: %s', inspect(Imap.parseHeader(buffer)));
            else
              console.log(prefix + 'Body [%s] Finished', inspect(info.which));
            console.log('\n\n\n\n'+buffer.toString()+'\n\n\n\n\n\n');
          );
        );
        msg.once('attributes', function(attrs) 
          console.log(prefix + 'Attributes: %s', inspect(attrs, false, 8));
        );
        msg.once('end', function() 
          console.log(prefix + 'Finished');
        );
      );
      f.once('error', function(err) 
        console.log('Fetch error: ' + err);
      );
      f.once('end', function() 
        console.log('Done fetching all messages!');
        imap.end();
      );
    );

有没有办法解析为没有任何标签或其他 HTML 信息的纯文本?

【问题讨论】:

【参考方案1】:

为此设计了一个节点模块: https://www.npmjs.com/package/html-to-text

var htmlToText = require('html-to-text');

var text = htmlToText.fromString('<h1>Hello World</h1>', 
    wordwrap: 130
);
console.log(text);

它还可以很好地将表格解析为文本。

【讨论】:

对于任何未来的读者,node-imap 实际上会为大多数包含没有任何 HTML 标记的纯文本版本的电子邮件检索 text 字段。您可以从object.text 轻松访问它。 puu.sh/vOzOL/0fd8a0fe6a.png

以上是关于如何从 Node.js IMAP 模块中的正文获取纯文本的主要内容,如果未能解决你的问题,请参考以下文章

无论如何,我可以在 node.js 中获取 html 正文

在 Node.js 中,模块如何从应用程序的 package.json 中获取数据?

使用 node.js 从 Google Cloud 函数中的 IncomingMessage 对象读取正文

在 Node.js 中接收电子邮件

如何清理 Node.js 和 Typescript 中的响应正文

从内存中的字符串加载 node.js 模块