使用IMAP提取标头错误TypeError:initial_value必须是str或None,而不是字节

时间:2015-02-16 23:14:42

标签: python python-3.x imaplib

这是我的代码连接到gmail并解析电子邮件:

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('example@gmail.com', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1]
parser = HeaderParser()
msg = parser.parsestr(header_data)

在此阶段我收到错误消息" TypeError:initial_value必须是str或None,而不是字节"

我正在使用python 3.如何将结果转换为字符串,以便ican使用parser.parsestr解析标题?

1 个答案:

答案 0 :(得分:3)

替换

header_data = data[1][0][1]

header_data = data[1][0][1].decode('utf-8')

这应该使它适用于Python 3.x.x

这是迁移代码以使其成为Python 3的难点之一,但一旦理解了它,就很容易修复。此外,如果您进行了更改,它将破坏与python 2.x.x的兼容性

在python 3中,所有字符串都是unicode,如果收到字节,则必须先将它们转换为str数据类型。 You can read more about that here