【问题标题】:How to reconstruct conversations or group emails?如何重建对话或群组电子邮件?
【发布时间】:2017-11-03 11:28:46
【问题描述】:

我有一个 PST 文件,其中包含用户的电子邮件历史记录。任务是读取此 PST 文件并重建电子邮件历史记录以将其显示在客户端中。这包括正确显示您从电子邮件客户端知道的对话:

Meeting at 8:00               07:34 am
  AW: Meeting at 8:00         09:12 am
    AW: AW: Meeting at 8:00   13:45 pm
[Jenkins Build] Success       11:54 am
  [Jenkins Build] Failed      12:13 pm
    [Jenkins Build] Success   01:12 pm
[Jenkins Build] Success       10:34 am
  [Jenkins Build] Failed      12:12 pm
    [Jenkins Build] Success   05:12 pm

但是,我不知道如何可靠地做到这一点。

我正在使用java-libpst(参见Official Documentation),它提供了一个PSTMessage 对象。有一个方法getConversationId(),但这似乎只是该消息的原始主题的字符串,这意味着可能存在重复(例如[Jenkins Build]*)。

所以,我不确定 Outlook 如何能够重建对话以及这是否微不足道,但如果真的有一个简单的方法可以做到这一点,我只是忽略了,如果有人让我知道,我会很高兴 - 否则这最终将导致我解析大量主题字段,解析它们并尝试按主题匹配电子邮件,但有可能会错过恰好具有相同主题的不同对话。

【问题讨论】:

    标签: email outlook pst java-libpst


    【解决方案1】:

    我认为您需要自己构建对话。您可能会发现此页面上引用的有关 the Netscape Mail message threading algorithm 的源代码很有帮助。

    我将源代码复制到 Github。这是the email Threader.java file

    这里有人提供an explanation of how Gmail constructs conversations 我的要点是:

    1. 来自任何先前电子邮件中的任何参与者的具有相同主题的电子邮件之后的电子邮件是同一对话的一部分。
    2. in-reply-to 电子邮件字段可以创建电子邮件对话的参与者,即使他们不是明确的参与者。

    地点:

    equivalent subject 表示相同的主题,或者会导致回复或转发的主题。 IE。 “FW: X”、“RE: X”、“Fwd: X”等

    explicit participants in an email:发件人或任何出现在收件人:或抄送:字段中的电子邮件。 (也可能是 BCC: 字段...)

    participants in an email:电子邮件中的明确参与者或使用in-reply-to 字段发送稍后电子邮件的任何人。

    participants in any previous email:不同的电子邮件是电子邮件的参与者,其发送日期较早,与当前电子邮件具有相同的主题。

    这是另一个exposition of email fields relevant to email threading。我从中得到的是,除了in-reply-to 标头之外,还应该参考References 标头,并且它更可靠。 (也许,如果存在,它应该取代 in-reply-to 标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      相关资源
      最近更新 更多