php – 获取该人刚写的实际电子邮件,不包括任何引用的文字

前端之家收集整理的这篇文章主要介绍了php – 获取该人刚写的实际电子邮件,不包括任何引用的文字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
网站上有两个先前存在的问题.
一个用于 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个最受欢迎的邮件客户端,并开始为每个客户端创建自定义正则表达式.然后对于每个这些客户端,也是一个不同的区域设置,因为我猜测用户的区域设置也会影响添加内容.

或者我应该总是删除前一行,如果它包含一个日期?等等

不幸的是,如果您想要仔细清理电子邮件(删除不是实际回复电子邮件本身的所有内容),您将受到伤害的世界.理想的方式是,正如你所建议的,为每个流行的电子邮件客户端/服务写出正则表达式,但这是一个非常可笑的工作量,我建议 being lazy and dumb.

有趣的是,即使Facebook engineers有这个问题的麻烦,还有Google has a patent的“检测引用文本”的方法.

有三种解决方案可以接受:

不要管它

第一个解决方案是将消息中的所有内容都留下.大多数电子邮件客户端都这样做,没有人会抱怨.当然,在线消息系统(如Facebook的“消息”)看起来很奇怪,如果他们有开创性的回复.使这个工作正常的一个鬼祟的方法是渲染任何引用的行折叠的消息,并包括一个“展开引用的文本”的链接.

回复与旧邮件分开

正如你所说,第二个解决方案是在你的消息的顶部放置一个描述性的消息,如———请回复上面这行———-,然后删除处理回复时,该行和下面的任何内容.许多系统都这样做,这不是世界上最糟糕的事情,但它确实使您的电子邮件看起来更“自动化”,而不是个人(在我看来).

剥离引用文本

最后一个解决方案是简单地删除任何以&gt,开头的新行,这可能是来自回复电子邮件的引用行.大多数电子邮件客户端使用此方法指示引用的文本.这里有一些正则表达式(在PHP中)可以做到这一点:

$clean_text = preg_replace('/(^\w.+:\n)?(^>.*(\n|$))+/mi','',$message_body);

使用这种更简单的方法有一些问题:

>许多电子邮件客户端还允许人们引用较早的电子邮件,并将这些引号与>所以你会剥离报价.
>通常,引用的电子邮件上面有一行,例如On [date],[person]说.该行很难删除,因为它在不同的电子邮件客户端之间的格式不一样,并且可能是您删除的引用文本之上的一行或两行.在我的PHP Imap库中,我实现了这种检测方法,取得了很大的成功.

当然,测试是关键,权衡可能对您的特定系统来说是值得的.因人而异.

猜你在找的PHP相关文章