我有一个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是如何重建对话的,以及这是否是微不足道的,但如果实际上有一种简单的方法可以做到这一点,我只是忽略了如果有人让我知道我会很高兴 - 否则这将最终解析大量的主题字段,解析它们并试图按照主题匹配电子邮件,同时存在丢失不同会话的危险,这些会话恰好具有相同的主题。
答案 0 :(得分:1)
我认为您需要自己构建对话。您可能会发现此页面上引用的有关the Netscape Mail message threading algorithm的源代码很有帮助。
我将源代码复制到了Github。这是the email Threader.java
file。
有人在提供an explanation of how Gmail constructs conversations我的要旨是:
in-reply-to
电子邮件字段可以创建电子邮件对话的参与者,即使他们不是明确的参与者。位置:
equivalent subject
表示相同的主题,或可能导致回复或转发的主题。即“ FW:X”,“ RE:X”,“ Fwd:X”等。
explicit participants in an email
:发件人或TO:或CC:字段中显示的任何电子邮件。 (也许也是BCC:字段...)
participants in an email
:电子邮件中的明确参与者或使用in-reply-to
字段发送了更高电子邮件的任何人。
participants in any previous email
:发送日期较早的电子邮件中参与邮件的不同电子邮件,以与当前电子邮件相同的邮件为准。
这里是另一个exposition of email fields relevant to email threading。我从中得到的是,除了References
标头之外,还应该参考in-reply-to
标头,它更可靠。 (也许,如果有的话,它应该取代in-reply-to
标头。