从电子邮件回复中删除原始邮件

我的应用程序收到来自用户 例如,来自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检查这一个

http://ejohn.org/projects/javascript-diff-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); 

请注意,如果作者交错回复文本和引用消息片段,可能会有几个有趣的片段。