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