我正在开发一个Web应用程序,它以线程格式(以及其他内容)解析和显示电子邮件消息.电子邮件可能来自任何数量的不同邮件客户端,可以是文本或HTML格式.
鉴于大多数人都倾向于发帖,我希望能够以类似于Gmail的方式隐藏电子邮件回复中的重复邮件(例如"显示引用的文字").
确定消息的哪一部分是回复是有点挑战性的.就个人而言,我在回复时在引用文本的开头使用">"分隔符.我创建了一个正则表达式,它查找这些行并在它们周围包装一个div,以允许一些JS隐藏或显示这个文本块.
然后我注意到Outlook默认情况下不使用">"字符,它只是在回复上方添加一个标题块,其中包含标题摘要(From,Subject,Date等).回复没有动摇.我可以对此进行匹配并隐藏电子邮件的其余部分,并假设它是最高报价.
然后我查看了Thunderbird,它使用">"表示文本,而>表示HTML邮件.我还没有看过Apple Mail的功能,Notes做了什么,或者其他数百万邮件客户端做了什么.
我会为每个客户编写一个特殊的案例正则表达式吗?还是有什么我想念的?
任何建议,示例代码或第三方库指针非常感谢!
复制gmail的方式很难,因为它不关心它是否是一个被引用的作品,如Zac所说,它似乎只关心差异.
实际上,100%的时间都很难做到这一点.纯文本电子邮件是"有损"的,它完全可以发送给您
> Here is my long line that is over 74 chars (email line length limit)
哪个可以编码为类似的东西
> Here is my long line that is over 74 chars (email= line length limit)
然后被解码为
> Here is my long line that is over 74 chars (email line length limit)
使其与内联回复无法区分.
这是电子邮件,所以变化比比皆是.电子邮件通常以74个字符进行换行,编码方案可能不同.它是一个真正的PITA.如果您可以访问HTML版本,那么您可能会更好地寻找报价标签等.另一个想法是解析纯文本和html版本以尝试确定边界.
此外,最好只计划特定的客户端黑客.它们都在结构和标题内容中以不同方式构造mime消息.
编辑:我说这是根据编写电子邮件处理系统的经验,以及看到有几个人尝试做你正在做的事情.它总是只有"好"的结果.