【问题标题】:Email threading电子邮件线程
【发布时间】:2009-12-27 20:22:52
【问题描述】:

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

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

【问题讨论】:

    标签: parsing sorting email-threading


    【解决方案1】:

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

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

    b) 在正文中的某处有 id

    c) 使用带有 ID 的自动生成的电子邮件别名,例如 “case-76236781980893@helpdesk.mycompany.com”。可以很容易地通过 procmail 或脚本来挑选 id。

    gmail 可能会使用主题、In-Reply-To 标头(可能未定义)(参考和 Original-Message-ID 标头也可能)和各种启发式方法的组合,这些方法效果很好,但当然不一定是防弹的,实施起来稍微复杂一些。也许像nestscape's original threading algorithm 这样的东西。尽管有些人报告说 gmail 不使用 In-Reply-To 标头,并且主要依赖于主题(如this post)。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多