电子邮件线程

时间:2009-12-27 20:22:53

标签: parsing sorting email-threading

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

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

3 个答案:

答案 0 :(得分:7)

在帮助台电子邮件管道中有3种基本方法:

a)在主题中包含id(在实践中工作正常)

b)在身体某处有身份

c)使用带有id的自动生成的电子邮件别名,例如“case-76236781980893@helpdesk.mycompany.com”。可以通过procmail或脚本来轻松处理,以便选择id。

gmail可能会使用主题的组合,In-Reply-To标头(可能没有定义)(也可能是引用和原始消息ID标头),以及各种启发式方法,它们工作得很好,但当然不一定是防弹的,并且实施起来稍微复杂一些。也许像nestscape's original threading algorithm这样的东西。虽然有些人报告说gmail没有使用In-Reply-To标题,但主要依赖于主题(如this post)。

答案 1 :(得分:2)

正如您所说,自定义标头可能会丢失,主题可能会发生变化。使用两者。如果存在,那么您可以识别该线程。我不知道有什么更好的方法来解决这个问题。

答案 2 :(得分:1)

如果您的邮件是使用Message-ID - 标头发送的,则任何符合标准的邮件程序都应添加In-Reply-To - 引用您的ID的标头。此外,References应该包含此帖子中所有以前邮件的列表。

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