从 IMAP 创建电子邮件线程?

Creating an email thread from IMAP?

我想从 IMAP 服务器上的电子邮件创建 "thread view"。

为此,我获取了收件箱和其他文件夹中的电子邮件列表,但我需要知道哪个电子邮件正在回复哪个。 IMAP 中的电子邮件之间是否有这样的 link?

例如,在 IMAP 服务器上,每封电子邮件都有一个唯一的 ID:如果电子邮件 B 是对电子邮件 A 的回复,那么 A 的 ID 是否存储在电子邮件 B 中?

如果您的 IMAP 服务器支持 RFC 5256 中描述的“线程”功能,您可以要求服务器为您线程化消息。

否则,您将不得不获取相关信息并在客户端上执行线程。 RFC 描述了两种算法来做到这一点。更简单的 ORDEREDSUBJECT 只是按主题对邮件进行分组,然后按日期对它们进行排序。这给出了扁平的螺纹结构。比较复杂的REFERENCES,查看每条消息的In-Reply-ToReferencesheaders,认为有这样headers的消息是children 消息的给定 Message-Id.

经典的方法是检索 message-id 和 references 字段。如果两条消息在消息 ID 或引用中包含相同的消息 ID,则它们在同一线程中。

Gmail 有一个新的和 IMO 更好的方法:每个线程都有一个数字 ID,您可以使用 x-gm-thrid 检索它。 Google 已经发布了使用它的各种语言的示例代码(该代码附近应该有链接)。