如何从 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 中,模块如何从应用程序的 package.json 中获取数据?
使用 node.js 从 Google Cloud 函数中的 IncomingMessage 对象读取正文