当前位置: 首页 > 知识库问答 >
问题:

如何在Node.js IMAP模块中从body获取纯文本

白晋鹏
2023-03-14

我正在使用节点的IMAP模块。js来解析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();
      });
    });

是否有一种方法可以解析为纯文本而没有任何标签或其他超文本标记语言信息?

共有1个答案

华哲茂
2023-03-14

有一个节点模块就是为此而设计的: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);

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

 类似资料:
  • 当我打印响应文本(使用alert)时,它会打印包含所有HTML信息的消息。实际消息以粗体突出显示 响应消息 HTML>标题>标题>Apache Tomcat/5.0.28-错误报告/标题>样式>!--{font-family:Tahoma,Arial,Sans-serif;color:white;background-color:#525d76;font-size:22px;}H2{font-fa

  • 问题内容: 假设我有两个模块: a.py: b.py: 我运行“ a.py”文件。打印: 问题 :如何从“ b.py”库中获取模块的路径(在本例中为“ a.py”)? 问题答案:

  • 13:30:42.739[Camel(camel-1)线程#1-文件://my_csv.csv]信息路由1-简单{[[567892]]} 13:30:42.741[Camel(camel-1)线程#1-文件://my_csv.csv]信息路由1-简单{[[269041]]} 13:30:42.743[Camel(camel-1)线程#1-文件://my_csv.csv]信息路由1-简单{[[622

  • 问题内容: 我需要从给定的文件描述符中获取一个文件名,该文件描述符位于我编写的一个小型Linux内核模块中。我尝试了在C中从文件描述符获取文件名中给出的解决方案,但是由于某种原因,它会打印出垃圾值(如解决方案中所述使用on )。我该怎么做? 问题答案: 不要调用-使用与读取其中一个链接时相同的方法。开始与代码中和的。 从广义上讲,给予和从你感兴趣的(你已采取的引用)的任务,你想做的事: 如果您的代

  • 问题内容: 在开发过程中,我以Debug模式运行Django,并使用文本模式应用程序将数据发布到我的应用程序中。理想情况下,当我收到http错误代码500时,我需要接收纯文本响应,因此我不必在所有HTML和Javascript中寻找真正的错误。 是否可以获取纯文本的Django 500 Internal Server Error? 问题答案: 我想写一个中间件,因为否则该异常在500.html中不

  • 问题内容: 我有一个包含多个Maven模块的项目 MockIFSClient 访问为 因此 IFSClientTest 运行鳍,因为它们在同一包中。 问题? 尝试访问相同代码的 调用,但现在失败,因为 services / pom.xml 具有以下依赖性 题 我要做出什么改变 这样也可以从不同的模块访问它 问题答案: 这个答案帮助我正确了 如何从Java中的类路径真正读取文本文件 我将代码更改为