2016-08-03 13 views
1

ich ein Stück Code habe E-Mails von Nachrichten von meinem Posteingang (gmail) zu erhalten. Erste E-Mails arbeiten korrekt, wenn ich email_from drucken, aber ich möchte eine Operation an Daten aufgespalten Namen und E-Mail usw. tun, aber dann Code brach nach dem Druck ersten Schleife Schritt und ich habe den Fehler:‚str‘ Objekt hat kein Attribut ‚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' 

Können Sie mir einige Ratschläge, wie man dieses Problem löst?

Code:

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

Antwort

3

In Ihrem Code Sie die E-Mail-Variable ersetzt ..

Try this ...

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

Sie haben Recht. Ich ersetzte E-Mail - ich hasse diese kleinen Fehler :) Danke für Ihre Hilfe. – Thaian

0

Ich hatte den gleichen Fehler [glücklich gelöst] Mein Fehler war im Shebang. Das sollte auf python3 zeigen.

#! /usr/bin/env python3