Parsing von E-Mail-Inhalten aus Poplib mit E-Mail-Modul (PYTHON)

PYTHON VERSION == 3.5

Code:

import getpass, poplib, email Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995') Mailbox.user("email_here@gmail.com") Mailbox.pass_('password_here') numMessages = len(Mailbox.list()[1]) for i in range(numMessages): info = b" ".join(Mailbox.retr(i+1)[1]) msg = email.message_from_bytes(info) print(msg.keys()) 

Ausgabe:

 ['MIME-Version'] ['MIME-Version'] ['MIME-Version'] ['Delivered-To'] ['Delivered-To'] ['Delivered-To'] ['Delivered-To'] ['Delivered-To'] ['Delivered-To'] ['Delivered-To'] ['Delivered-To'] 

Die Ausgabe ist nicht korrekt, da es noch mehr Felder aus dem msg als "MIME-Version" und "Delivered-To" dachte ich

email.message_from_bytes() analysiert den Inhalt eines Byte-Strings

msg kein Byte String?

Die docs empfehlen das:

 M = poplib.POP3('localhost') M.user(getpass.getuser()) M.pass_(getpass.getpass()) numMessages = len(M.list()[1]) for i in range(numMessages): for j in M.retr(i+1)[1]: print(j) 

Gibt es eine Möglichkeit, die zurückgegebene Nachricht mit dem E-Mail-Modul zu analysieren? So können wir die E-Mail-Details speichern. Wie Absender, Körper, Header etc.

One Solution collect form web for “Parsing von E-Mail-Inhalten aus Poplib mit E-Mail-Modul (PYTHON)”

Die Antwort erwies sich als ziemlich einfach

 import getpass, poplib, email Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995') Mailbox.user("email_here@gmail.com") Mailbox.pass_('password_here') numMessages = len(Mailbox.list()[1]) for i in range(numMessages): raw_email = b"\n".join(Mailbox.retr(i+1)[1]) parsed_email = email.message_from_bytes(raw_email) print(parsed_email.keys()) 

Anstatt sich mit einem Platz raw_email mit einem Leerzeichen, der sich einfach mit einem \n und das email Modul die Felder korrekt analysieren kann:

Auch eine awesome Sache über die Verwendung der email Modul ist, wenn Sie email.message_from_bytes() die Ausgabe zurückgegeben wird ein dict

So greifen Sie auf die Felder wie folgt zu:

 raw_email = b"\n".join(Mailbox.retr(i+1)[1]) parsed_email = email.message_from_bytes(raw_email) print(parsed_email["header"]) 

Aber was ist, wenn das Feld nicht existiert ?:

 raw_email = b"\n".join(Mailbox.retr(i+1)[1]) parsed_email = email.message_from_bytes(raw_email) print(parsed_email["non-existent field"]) 

Der obige Code wird None und keinen KeyError

  • Wie man auf numpy Standard globalen Zufallszahlengenerator zugreift
  • Submodul konnte kein Parentmodul importieren (Python)
  • Python 3 smtplib mit Unicode-Zeichen senden
  • Catch "vor / nach Funktionsaufruf" Ereignisse für alle Funktionen in der Klasse
  • In python, wenn eine Funktion nicht eine return-Anweisung hat, was gibt es zurück?
  • Holen Sie sich vollständige Liste aller möglichen Klassenattribute
  • Verwenden Sie Python, um die CSV-Ausgabe an STDOUT zu schreiben
  • Python - Ausarbeitung, wenn die Zeit zwischen zwei Mal liegt
  • Senden von Piped-Befehlen über python3-Teilprozess
  • Spielt eine Menge Töne auf einmal
  • Zeichnung Rechteck oder Linie mit Maus-Ereignisse in offenen Lebenslauf mit Python
  • Python ist die beste Programmiersprache der Welt.