Parsing 电子邮件线程

Parsing 电子邮件线程,parsing,sorting,email-threading,Parsing,Sorting,Email Threading,我在一个帮助台应用程序中工作,我有一个独立的脚本,可以查询邮件服务器并解析它在那里找到的邮件。 我面临以下问题:如何以可靠的方式确定哪些邮件回复了哪些邮件? 我可以在主题中添加“[ticket:21312]”之类的内容并查找,但是如果用户更改了主题怎么办?还有别的办法吗?我可以通过设置自定义邮件头并查找该邮件头来完成此操作,或者在用户回复时,邮件服务器之间不会保留该邮件头吗? 当我从应用程序向一个不存在的用户或配额已满的用户发送一条消息,并且他的服务器使用通常的标准消息“邮件守护程序位于……无法

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


gmail是如何做到的?在那里,几乎所有情况下,邮件都能完美地排序。

正如您所说,自定义标题可能会丢失,主题可能会更改。两者都用。如果存在一个线程,则可以识别该线程。我不知道有什么更好的办法来解决这个问题

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

a) 将id包含在主题的某个位置(在实践中效果很好)

b) 身份证在身体的某个地方

c) 使用自动生成的id为的电子邮件别名,如“case”-76236781980893@helpdesk.mycompany.com". 这可以很容易地通过procmail或脚本来处理,以选择id


gmail可能会将主题和各种启发式方法结合使用,以回复标题(可能未定义)(也可能是引用和原始消息ID标题)和各种启发式方法,它们工作得很好,但当然不一定是防弹的,而且实现起来稍微复杂一些。大概是吧。尽管有报道称gmail不使用回复标题,主要依赖主题(如中).

如果您的邮件发送时带有
邮件ID
-标题,则任何符合标准的邮件发送人都应添加一个
,以回复引用您ID的
-标题。此外,
引用
应包含此线程中以前所有邮件的列表


这适用于大多数邮件客户机,为了安全起见,您必须使用主题,简单的方法是添加“[issue:123]”内容,第二个回退是识别主题(在所有变体中删除“Re:”部分后)为此,您可以了解大多数合法发件人……

除了选项C之外:如果您的邮件服务器支持,您还可以使用plus地址。例如:
case+76236781980893@helpdesk.mycompany.com
交付给
case@helpdesk.mycompany.com
并且可以从那里解析。以下是jwz线程算法的实现::[Python]*[JS]*[Ruby]