使用Python解析线程索引邮件头

问题描述 投票:10回答:2

某些邮件客户端,请不要设置References标头,但要设置Thread-Index

有没有一种方法可以在Python中解析此标头?

相关:How does the email header field 'thread-index' work?

邮件1

Date: Tue, 2 Dec 2014 08:21:00 +0000
Thread-Index: AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDg==

邮件2(与邮件1有关)

Date: Mon, 8 Dec 2014 13:12:13 +0000
Thread-Index: AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDgE4StZw

更新

我希望能够在我的应用程序中链接这两个邮件。它已经非常适合众所周知的ReferencesIn-Reply-To标头。

python email-headers
2个回答
9
投票

使用信息here,我可以将以下各项放在一起:

import struct, datetime

def parse_thread_index(index):

    s = index.decode('base64')

    guid = struct.unpack('>IHHQ', s[6:22])
    guid = '{%08X-%04X-%04X-%04X-%12X}' % (guid[0], guid[1], guid[2], (guid[3] >> 48) & 0xFFFF, guid[3] & 0xFFFFFFFFFFFF)

    f = struct.unpack('>Q', s[:6] + '\0\0')[0]
    ts = [datetime.datetime(1601, 1, 1) + datetime.timedelta(microseconds=f//10)]

    for n in range(22, len(s), 5):
        f = struct.unpack('>I', s[n:n+4])[0]
        ts.append(ts[-1] + datetime.timedelta(microseconds=(f<<18)//10))

    return guid, ts

给出线程索引,它返回一个元组(guid, [list of dates])。对于您的测试数据,结果为:

 > parse_thread_index('AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDgE4StZw')
('{27F26E41-224C-4139-9243-CF9D56CD880E}', [datetime.datetime(2014, 12, 2, 8, 9, 6, 673459), datetime.datetime(2014, 12, 8, 13, 11, 0, 807475)])

我手头没有足够的测试数据,因此此代码可能有错误。请随时告诉我。


0
投票

Hii,我一直在尝试使用java解析线程索引,尝试了您的输入,它给出了正确的结果日期...但是问题是,当我从我的邮箱中给线程索引提供索引时,它显示了1830年的某个日期

这是我的示例会话索引:AQHWLRNo4NaOjvXU8EODe0ZotrA8B6itzaxf]

Decoded Hex Value : 0101D6304234473CD07668E7CE458343FB28085F91B0A8B595DBAB
FILETIME: 0101D6304234
guid: 473CD07668E7CE458343FB28085F91B0
childs: [A8B595DBAB]
zero paded file time: 0101D63042340000
nano seconds: 72574571772116992
Result Time :1830-12-25T08:19:37.211699200Z

[这里是结果 AdAOBz5QJ / JuQSJMQTmSQ8 + dVs2IDg ==问题中提到的]

Hex :01D00E073E5027F26E41224C41399243CF9D56CD880E
FILETIME: 01D00E073E50
guid: 27F26E41224C41399243CF9D56CD880E
childs: []
zero paded file time: 01D00E073E500000
nano seconds: 130619813466734592
Result Time:2014-12-02T08:09:06.673459200Z
© www.soinside.com 2019 - 2024. All rights reserved.