微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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库中,我实现了这种检测方法,取得了很大的成功.

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

原文地址:https://www.jb51.cc/php/131122.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐