一个用于 Python,一个用于Java.
> Java How to remove the quoted text from an email and only show the new text
> Python Reliable way to only get the email text,excluding previous emails
我想要能够完全一样(在PHP中).我创建了一个邮件代理,其中两个人可以通过电子邮件发送一个唯一的电子邮件地址在一起.
我发现的问题是,当一个人收到电子邮件并发回答时,我正在努力准确地捕获他撰写的文字,并丢弃了之前的通话中引用的文字.
我正在寻找一个可以用于HTML电子邮件和Plaintext电子邮件的解决方案,因为我正在发送两个.
我也有能力,如果它有助于插入一些< ***** RESPOND此处*******>标签如果在电子邮件中必要,这意味着我可以丢弃以下所有内容.
你会建议我做什么?总是将该标签添加到HTML副本和明文副本中,然后抓住其上的所有内容?
我仍然会留下知道每个邮件客户端如何创建响应的场景.因为Gmail会这样做:
On Wed,Nov 2,2011 at 10:34 AM,Message Platform <35227817-7cfa-46af-a190-390fa8d64a23@dev.example.com> wrote: ## In replies all text above this line is added to your message conversation ##
任何建议或建议的最佳做法?
或者我应该抓住50个最受欢迎的邮件客户端,并开始为每个客户端创建自定义正则表达式.然后对于每个这些客户端,也是一个不同的区域设置,因为我猜测用户的区域设置也会影响添加的内容.
或者我应该总是删除前一行,如果它包含一个日期?等等
有趣的是,即使Facebook engineers有这个问题的麻烦,还有Google has a patent的“检测引用文本”的方法.
有三种解决方案可以接受:
不要管它
第一个解决方案是将消息中的所有内容都留下.大多数电子邮件客户端都这样做,没有人会抱怨.当然,在线消息系统(如Facebook的“消息”)看起来很奇怪,如果他们有开创性的回复.使这个工作正常的一个鬼祟的方法是渲染任何引用的行折叠的消息,并包括一个“展开引用的文本”的链接.
正如你所说,第二个解决方案是在你的消息的顶部放置一个描述性的消息,如———请回复上面这行———-,然后删除处理回复时,该行和下面的任何内容.许多系统都这样做,这不是世界上最糟糕的事情,但它确实使您的电子邮件看起来更“自动化”,而不是个人(在我看来).
剥离引用文本
最后一个解决方案是简单地删除任何以>,开头的新行,这可能是来自回复电子邮件的引用行.大多数电子邮件客户端使用此方法指示引用的文本.这里有一些正则表达式(在PHP中)可以做到这一点:
$clean_text = preg_replace('/(^\w.+:\n)?(^>.*(\n|$))+/mi','',$message_body);
使用这种更简单的方法有一些问题:
>许多电子邮件客户端还允许人们引用较早的电子邮件,并将这些引号与>所以你会剥离报价.
>通常,引用的电子邮件上面有一行,例如On [date],[person]说.该行很难删除,因为它在不同的电子邮件客户端之间的格式不一样,并且可能是您删除的引用文本之上的一行或两行.在我的PHP Imap库中,我实现了这种检测方法,取得了很大的成功.
当然,测试是关键,权衡可能对您的特定系统来说是值得的.因人而异.