2015-02-18 2 views
0

Вот мой код:TypeError: initial_value должно быть str или none, а не байтами в python 3?

import imaplib 
from email.parser import HeaderParser 
conn = imaplib.IMAP4_SSL('imap.gmail.com') 
conn.login('[email protected]', '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 must be str or none, not bytes 

Im используя Python 3, который, по-видимому автоматически декодирует. Так почему я все еще получаю это сообщение об ошибке?

+0

Какую линию вы получите эту ошибку на? –

+0

msg = parser.parsestr (header_data) –

ответ

6

Вы можете попробовать:

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

Это работает, спасибо. С Python 2 вам не требуется использовать декодирование() – Desmond

3

Я хотел бы предложить сделать это, (Python 3)

typ, data = conn.fetch('1', '(RFC822)') # will read the first email 
email_content = data[0][1] 
msg = email.message_from_bytes(email_content) # this needs to be corrected in your case 
emailDate = msg["Date"] 
emaiSubject = msg["Subject"]