从电子邮件回复中删除原始邮件
我的应用程序收到来自用户 例如,来自gmail的回复就是这样的:
This is some new text On Sun, Apr 1, 2012 at 3:32 AM, My app < 4f77ed3860c258a567aeabf8@myapp.com> wrote: > Original... > message..
当然,这种治疗方法因客户而异。
现在我正在识别'4f77ed3860c258a567aeabf8',然后扔掉所有的东西,因为我知道他们发送了什么邮件地址。 这不是一个通用的解决scheme,但适用于我的目的, 除了在“原始消息”行中存在换行符的情况之外,如上例所示。
是否有更好,标准的方式去除用户对电子邮件的回复中的过去消息?
如果您希望100%的方法删除最近发布的内容,请比较新消息和前一个消息中的每个字符。 如果你不想写你自己的差异parsing器,看看这个库。
https://github.com/cemerick/jsdifflib
或者,如果你想要一个轻量级的algorithm检查这一个
有一个叫做emailreplyparser的npm模块,它是从一个github ruby库移植来的,它是这样做的。 正如你所指出的那样,这种格式并不是标准的,因此任何解决scheme都将是非常脆弱和不完善的,但是,
以下是我从新的Gmail API获取JSON响应并成功访问给定消息的新答复文本的示例。
var erp = require('emailreplyparser').EmailReplyParser.read; var message = require('./sample_message.json'); var buffer = new Buffer(message.payload.parts[0].body.data, 'base64'); var body = buffer.toString(); //body is the whole message, the new text and the quoted reply portion // console.log(body); var parsed = erp(body); //this has just the text of the reply itself console.log(parsed.fragments[0].content);
请注意,如果作者交错回复文本和引用消息片段,可能会有几个有趣的片段。