Вероятно, нет библиотек, о которых я знаю, но вы можете сделать это, посмотрев значения заголовков в письме. Есть несколько заголовков в электронных письмах, которые помещаются туда, когда кто-то отвечает на сообщения. Здесь обсуждаются заголовки.
Message-ID
Каждое письмо содержит заголовок Message-ID, который представляет собой глобально уникальную строку мусора. Иногда это GUID, но в большинстве случаев это некоторая комбинация GUID + домен. Формат не имеет значения, это просто какая-то уникальная строка.
In-Reply-To
In-Reply-To содержит значение идентификатора сообщения, для которого это письмо является ответом.
Ссылки
Может содержать список идентификаторов сообщений всех сообщений в цепочке от текущего сообщения до начала цепочки. Если поток очень длинный, этот список может быть сокращен посередине, но всегда должны присутствовать первое и последнее сообщение. (Старое почтовое программное обеспечение использует это поле для идентификации других сообщений, к которым относятся текущие сообщения.)
Outlook, использующий Thread-Index, в котором будут храниться все электронные письма, не относящиеся к одному потоку.
Вы можете получить эти заголовки, используя старый добрый JavaMail, так что не составит труда перестроить потоки таким образом. К сожалению, нет такого стандартного заголовка, как Thread-Index
http://people.dsv.su.se/~jpalme/ietf/message-threading.html
StackoverFlow сообщение на тему индекса
Как работает поле заголовка письма «thread-index»?