网站上有两个预先存在的问题。一个用于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个最受欢迎的邮件客户端,并开始为每个客户端创建自定义Regex。然后,对于每个客户端,还有两个不同的地区设置,因为我猜用户的区域设置也会影响添加的内容。
或者,如果上面的行包含日期,我应该始终删除它吗?等
发布于 2018-01-02 04:06:35
有许多库可以帮助您从消息中提取回复/签名:
我还读到,Mailgun有一个服务来解析入站电子邮件,并将其内容发布到您选择的URL中。它将自动删除您的电子邮件中引用的文本:https://www.mailgun.com/blog/handle-incoming-emails-like-a-pro-mailgun-api-2-0/
希望这能有所帮助!
发布于 2012-09-26 22:43:58
不幸的是,如果你想一丝不苟地清理邮件(删除不属于实际回复邮件本身的内容),你将陷入一个充满伤害的世界。理想的方法是,如您所建议的,为每个流行的电子邮件客户端/服务编写regex,但这是相当荒谬的工作,我推荐又懒又哑。
有趣的是,即使Facebook工程师在这个问题上也有问题,而谷歌有一项专利在“检测引用文本”的方法上也有问题。
有三种解决方案是可以接受的:
,别管它,
第一个解决方案是将所有内容都留在消息中。大多数电子邮件客户都这样做,而且似乎没有人抱怨。当然,网络信息系统(比如Facebook的“信息”)如果有起始式回复的话,看起来会很奇怪。让这个工作正常的一种鬼鬼祟祟的方法是用任何被引用的行来呈现消息,并包含一个“展开引用文本”的小链接。
将答复与旧消息分开
第二个解决方案,正如您提到的,是在您的消息的顶部放置一个描述性的消息,比如--------- please reply above this line ----------,然后在处理回复时去掉该行和下面的任何内容。很多系统都这么做,这不是世界上最糟糕的事情.但这确实会让你的电子邮件看起来更“自动化”,而不那么个人化(在我看来)。
带出引文
最后一种解决方案是简单地删除以>开头的任何新行,这大概是回复电子邮件中引用的行。大多数电子邮件客户端使用这种方法来指示引用的文本。下面是一些正则表达式(在PHP中)就是这样做的:
$clean_text = preg_replace('/(^\w.+:\n)?(^>.*(\n|$))+/mi', '', $message_body);使用这种更简单的方法存在一些问题:
>以及,所以你将删除报价。On [date], [person] said。这一行很难删除,因为它在不同的电子邮件客户端之间没有相同的格式,而且它可能比您删除的引用文本高出一两行。我已经在我的PHP库中实现了这个检测方法,并取得了一定的成功。当然,测试是关键,对于您的特定系统来说,这种权衡可能是值得的。YMMV
发布于 2014-05-26 19:39:57
可能有帮助:商鹌鹑是一个帮助识别电子邮件中引用的文本的Python库
https://stackoverflow.com/questions/7978987
复制相似问题