Gebrauch des Moduls email???

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Freitag 6. Mai 2005, 19:09

Da ich mich an den Listings von "Programming Python" orientiert habe, ist mir zuerst gar nicht aufgefallen, dass Teile des Codes veraltet sind. Im speziellen ist das der Gebrauch des rfc288-Moduls zum parsen von Mails. Der neue Standard ist das Modul email, aber ich blicke da echt nicht durch wie das Teil zu verwenden ist, da absolut kein Beispielcode vorhanden ist der bei meinem Problem weiterhelfen könnte. Ausserdem ist email ein zu allgemeiner Begriff, was dazu führt das google nur Müll spuckt...

Ich wäre deshalb froh, wenn mir mal einer erklären könnte, wie ich die Methode parse (das die Headers in einem Dictionary liefern sollte) beutzen muss.
BlackJack

Samstag 7. Mai 2005, 00:19

Deine Frage ist ziemlich allgemein. Welche parse-Methode meinst Du? Hilft Dir so etwas schon weiter:

Code: Alles auswählen

In [18]: import email

In [19]: m = email.message_from_string('from: me\nto: you\n\ntest')

In [20]: dict(m.items())
Out[20]: {'to': 'you', 'from': 'me'}
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Samstag 7. Mai 2005, 09:14

Danke BLackJack, damit hast du mein Problem gelöst.
Gast

Samstag 7. Mai 2005, 09:55

Wie krieg ich jetzt damit den Message body raus? Die drei Header die ich haben wollte, hab ich, aber der Message Body verschwindet.

Und eine kleine Frage nebenbei. Sollte

Code: Alles auswählen

resultat = Parse().parsestr(string)
nicht equvalent mit

Code: Alles auswählen

m = email.message_from_string(string)
sein? Wenn ja, warum krieg ich dann einen Syntax Fehler?
BlackJack

Samstag 7. Mai 2005, 20:59

Erstmal habe ich es etwas zu umständlich gemacht: So ein Message-Objekt verhält sich selbst schon wie ein Dictionary der Header. Und an den Inhalt der Mail kommt man mit `get_payload()`.

Code: Alles auswählen

In [27]: m = email.message_from_string('from: me\nto: you\n\ntest')

In [28]: m['from']
Out[28]: 'me'

In [29]: m.get_payload()
Out[29]: 'test'
Antworten