Объект 'str' не имеет атрибута 'message_from_bytes'

У меня есть часть кода для получения сообщений электронной почты из моего почтового ящика (gmail). Получение сообщений электронной почты работает правильно, когда я печатаю email_from но я хотел бы выполнить некоторую операцию с именем разделения данных и электронной почтой и т. Д., Но затем код сломался после первого шага печати, и я получил ошибку:

 Traceback (most recent call last): File "C:\Users\loc\Desktop\extract_gmail.py", line 24, in <module> email_message_raw = email.message_from_bytes(data[0][1]) AttributeError: 'str' object has no attribute 'message_from_bytes' 

Можете ли вы дать мне несколько советов, как решить эту проблему?

Код:

 import imaplib import email from email.header import Header, decode_header, make_header # Connection settings HOST = 'imap.gmail.com' USERNAME = '***' PASSWORD = '***' m = imaplib.IMAP4_SSL(HOST, 993) m.login(USERNAME, PASSWORD) m.select('INBOX') result, data = m.uid('search', None, "ALL") if result == 'OK': for num in data[0].split()[:5]: result, data = m.uid('fetch', num, '(RFC822)') if result == 'OK': # Get raw message email_message_raw = email.message_from_bytes(data[0][1]) # Decode headers email_from = str(make_header(decode_header(email_message_raw['From']))) # Print each name and email name, email = email_from.split('<') email.replace(">", "") print(name + "|" + email) # When i swap to just print email_from then works # print(email_from) # Close server connection m.close() m.logout() 

One Solution collect form web for “Объект 'str' не имеет атрибута 'message_from_bytes'”

В вашем коде вы заменили переменную электронной почты.

Попробуй это…

 import imaplib import email from email.header import Header, decode_header, make_header # Connection settings HOST = 'imap.gmail.com' USERNAME = '***' PASSWORD = '***' m = imaplib.IMAP4_SSL(HOST, 993) m.login(USERNAME, PASSWORD) m.select('INBOX') result, data = m.uid('search', None, "ALL") if result == 'OK': for num in data[0].split()[:5]: result, data = m.uid('fetch', num, '(RFC822)') if result == 'OK': # Get raw message email_message_raw = email.message_from_bytes(data[0][1]) # Decode headers email_from = str(make_header(decode_header(email_message_raw['From']))) # Print each name and email name, email_addr = email_from.split('<') email_addr.replace(">", "") print(name + "|" + email_addr) # When i swap to just print email_from then works # print(email_from) # Close server connection m.close() m.logout() 
Python - лучший язык программирования в мире.