gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:01:44 29 4
gpt4 key购买 nike

网站上有两个预先存在的问题。一种用于 Python,一种用于 Java。

我希望能够做几乎完全相同的事情(在 PHP 中)。我创建了一个邮件代理,两个人可以通过向一个唯一的电子邮件地址发送电子邮件来一起通信。然而,我发现的问题是,当一个人收到电子邮件并点击回复时,我很难准确地捕获他写的文本并丢弃以前通信中引用的文本。

我正在尝试找到一种适用于 HTML 电子邮件和纯文本电子邮件的解决方案,因为我同时发送这两种电子邮件。

如果有帮助,我也有能力插入一些<*****RESPOND ABOVE HERE*******>如果需要,请在电子邮件中标记,这意味着我可以丢弃下面的所有内容。

你会推荐我做什么?总是将该标记添加到 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 的“消息”)有初始风格的回复,它们看起来很奇怪。使这项工作正常进行的一种偷偷摸摸的方法是呈现折叠的任何引用行的消息,并包含一个指向“扩展引用文本”的小链接。

将回复与旧消息分开

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

去掉引用的文字

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

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

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

  • 许多电子邮件客户端还允许人们引用较早的电子邮件,并在这些引用行前加上 >,这样您就可以去掉引号。
  • 通常,在引用的电子邮件上方有一行类似 On [date],[person] said。此行很难删除,因为它在不同的电子邮件客户端之间的格式不一样,并且它可能在您删除的引用文本上方一两行。我已经在我的 PHP Imap 中实现了这种检测方法,并取得了一定的成功。图书馆。

当然,测试是关键,对于您的特定系统而言,权衡可能是值得的。 YMMV。

关于php - 获取该人刚刚写的实际电子邮件,不包括任何引用的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978987/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com