2009-12-27 182 views
3

我在帮助台应用程序中工作,我有一个独立脚本查询邮件服务器并解析它在那里找到的邮件。
我正面临以下问题:如何以可靠的方式找出哪些邮件正在回复哪些邮件?
我可以在“[ticket:21312]”这个主题中添加一些内容,然后查找该内容,但如果用户更改了主题,该怎么办?有另一种方法吗?我可以通过设置一个自定义邮件标题并查找该标题,否则邮件服务器之间的邮件服务器不会在用户回复邮件时保留。 怎么样当我从我的应用程序发送一条消息到一个非现有用户或配额已满的用户时,他的服务器用通常的标准消息“邮件守护进程......不能......”回复,然后该主题也将被修改,并且我无法正确地将邮件作为对现有邮件的回复。电子邮件线程

gmail如何做到这一点?在几乎所有的情况下,这些消息都是完美排序的。

回答

6

有三种基本方法:

一)在主题标识的地方(工作在实践中精)

二)有ID在身体某处

c)使用带有ID的自动生成的电子邮件别名,如[email protected]。可以很容易地通过procmail或脚本来处理id。

gmail可能会使用主题,In-Reply-To标题(可能未定义)(引用和原始消息ID标头也可能)以及各种启发式的组合,当然不一定是防弹的,而且稍微牵涉到实施。或许像nestscape's original threading algorithm。尽管有些人报告说gmail不使用In-Reply-To头并且主要依赖于该主题(如this post)。

+3

除了选项C:如果您的邮件服务器也可以使用加号支持它。例如:'case + 76236781980893 @ helpdesk.mycompany.com'交付给case @ helpdesk.mycompany.com'并且可以从那里解析。 – 2011-04-12 18:29:02

+0

以下是jwz线程算法的实现: * [Python] https://github.com/FreeDiscovery/jwz线程 * [JS] https://github.com/maxogden/conversationThreading-js * [Ruby] https ://github.com/fdietz/jwz_threading – Ben 2018-01-30 12:24:05

2

正如你所说自定义标题可能会丢失,主题可能会改变。同时使用。如果存在,那么你可以识别线程。我不知道有什么更好的方法来解决这个问题。

在服务支持电子邮件管道
1

如果您的邮件与Message-ID一起发送 - 任何符合标准的邮件发送者应该添加一个In-Reply-To - 引用您的Id的标头。此外References应该包含此线程中所有以前的邮件列表。

这适用于大多数邮件客户端,为了保证客户端的安全,您必须使用主题,简单的方法是添加“[issue:123]”,次要的备份是识别主题在切断所有变体中的“Re:”部分之后),这可以帮助您了解大多数合法发件人...