4

我在一个帮助台应用程序中工作,我有一个独立的脚本来查询邮件服务器并解析它在那里找到的邮件。
我面临以下问题:我如何以可靠的方式弄清楚什么邮件是回复什么邮件?
我可以在主题中添加一些内容,例如“[ticket:21312]”并查找它,但如果用户更改主题怎么办?还有其他方法吗?我可以通过设置自定义邮件标头并查找它来做到这一点,否则邮件服务器之间不会在用户回复时保留标头?当我从我的应用程序向不存在的用户或配额已满的用户发送消息并且他的服务器回复通常的标准消息“......主题也将被修改,我无法正确放置消息作为对现有邮件的回复。

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

4

3 回答 3

7

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

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

b)在体内某处有id

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

gmail 可能会使用主题、In-Reply-To 标头(可能未定义)(参考和 Original-Message-ID 标头也可能)和各种启发式方法的组合,这些方法效果很好,但当然不一定是防弹的,并且稍微涉及实施。可能类似于nestscape 的原始线程算法。尽管有些人报告说 gmail 不使用 In-Reply-To 标头,并且主要依赖于主题(如本文所述)。

于 2009-12-27T20:30:22.627 回答
2

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

于 2009-12-27T20:28:31.723 回答
1

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

这适用于大多数邮件客户端,为了确保您必须使用主题的不良客户端的安全,简单的方法是添加“[issue:123]”,次要后备是识别主题(在剪切后“回复:”是所有变体的一部分)为此它可以帮助您了解大多数合法发件人......

于 2009-12-27T22:51:22.117 回答