Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python解析线程索引邮件头_Python_Email Headers - Fatal编程技术网

用Python解析线程索引邮件头

用Python解析线程索引邮件头,python,email-headers,Python,Email Headers,有些邮件客户端不设置引用头,而是设置线程索引 有没有办法在Python中解析这个头文件 相关的: 邮件1 Date: Tue, 2 Dec 2014 08:21:00 +0000 Thread-Index: AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDg== 邮件2(与邮件1相关) 更新 我希望能够在我的应用程序中链接这两封邮件。它已经非常适用于众所周知的参考和回复标题。使用该信息,我能够将以下内容组合在一起: import struct, datetime def parse

有些邮件客户端不设置
引用
头,而是设置
线程索引

有没有办法在Python中解析这个头文件

相关的:

邮件1

Date: Tue, 2 Dec 2014 08:21:00 +0000
Thread-Index: AdAOBz5QJ/JuQSJMQTmSQ8+dVs2IDg==
邮件2(与邮件1相关)

更新

我希望能够在我的应用程序中链接这两封邮件。它已经非常适用于众所周知的
参考
回复
标题。

使用该信息,我能够将以下内容组合在一起:

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

我手头没有足够的测试数据,所以这段代码可能有缺陷。请随时告诉我。

您到底想用线程索引做什么?你想检索什么样的信息?似乎没有python包来解析这个头文件,您必须实现一些适合您需要的东西。作为使用python解析此标头的第一个指南可能很有用。如果你能具体说明你的需要,也许我能帮你。祝你好运@maccinza我更新了这个问题:我希望能够在我的应用程序中链接这两封邮件。它已经非常适用于众所周知的引用和回复标题。非常感谢。很好!“kp4o6SAzO6Xc19R5OPjnmqbg6v2utA==”失败:溢出错误:日期值超出range@guettli:这看起来不是有效的头(第一个字节必须是
1
)。我找到了解决此问题的另一种方法,在我看来,它比您的可读性稍高。但目前,您的解决方案在生产中运行了几年,没有任何问题。因此,如果其他人或我自己将来需要备份解决方案,这只是为了提供信息。[您可以在链接页面的按钮上找到代码。
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
 > 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)])