2016-08-03 89 views
1

我有一段代碼可以從我的收件箱(gmail)的郵件中獲取電子郵件。獲取郵件工作正確的,當我打印email_from,但我想這樣做的分割數據的姓名和電子郵件等,但後來碼打印第一循環步驟之後壞了,我得到了一些錯誤操作:'str'對象沒有屬性'message_from_bytes'

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() 

回答

3

在你的代碼取代了電子郵件變量..

嘗試......

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() 
+1

你有權利。我更換了電子郵件 - 我討厭這個小錯誤:)感謝您的幫助。 – Thaian

0

我有同樣的錯誤[高興地解決] ,我的錯誤在於shebang。這應該指向python3。

#! /usr/bin/env python3 
相關問題