E-Mail-Nachricht ist manchmal eine Zeichenfolge und manchmal eine Liste. Warum?

7

Meine Anwendung ist in Python geschrieben. Was ich mache ist, dass ich ein Skript für jede E-Mail, die ich per Postfix erhalten habe, mache und etwas mit dem E-Mail-Inhalt mache. Procmail ist verantwortlich für das Ausführen des Skripts, wobei die E-Mail als Eingabe genommen wird. Das Problem begann, als ich die Eingabe-Nachricht (möglicherweise Text) in ein email_message-Objekt konvertierte (weil Letzteres nützlich ist). Ich benutze email.message_from_string (wo E-Mail ist das Standard-E-Mail-Modul, kommt mit Python).

%Code%

Dieser message_body gibt manchmal eine Liste [email.message.Message-Instanz, email.message.Message-Instanz] zurück und gibt manchmal eine Zeichenfolge zurück (tatsächlicher Body-Inhalt der eingehenden E-Mail). Warum ist es. Und sogar ich fand eine weitere Beobachtung. Als ich durch den Email-Nachrichtentext.Message.get_payload () blätterte, fand ich das ..
"" " Die Nutzlast wird entweder ein Listenobjekt oder eine Zeichenfolge sein. Wenn Sie mutieren Das Listenobjekt, Sie ändern die Payload der Nachricht an Ort und Stelle ..... "" "

Wie also habe ich generische Methode, um den Körper der E-Mail durch Python zu bekommen? Bitte hilf mir.

    
None-da 27.02.2009, 12:24
quelle

4 Antworten

11

Nun, die Antworten sind richtig, Sie sollten die Dokumente lesen, aber für ein Beispiel einer generischen Art:

%Vor%

Dies ist anfällig für ein Desaster, da es denkbar ist, dass die Teile selbst Multiparts haben und es wirklich nur den ersten Textteil zurückgibt, also könnte das auch falsch sein, aber Sie können damit spielen.

    
Ali Afshar 27.02.2009, 12:53
quelle
10

So verrückt es auch erscheinen mag, der Grund für die manchmal String-, manchmal Listen-Semantik ist in der Dokumentation angegeben . Grundsätzlich werden mehrteilige Nachrichten als Listen zurückgegeben.

    
unwind 27.02.2009 12:31
quelle
9

Statt einfach nach einem Unterteil zu suchen, verwenden Sie walk (), um den Nachrichteninhalt zu durchlaufen

%Vor%

Die Methode walk () gibt einen Iterator zurück, mit dem Sie eine Schleife erstellen können (d. h. es handelt sich um einen Generator). Wenn die Nachricht kein Container aus Teilen ist (d. H. Keine Anhänge oder Alternativen hat), gibt die Methode walk () einen Iterator mit einem einzelnen Element zurück - die Nachricht selbst.

Sie möchten 'mehrteilige' Teile überspringen, da sie nur kleben.

Die obige Methode gibt alle lesbaren Teile zurück. Sie können dies erweitern, um die Textteile einfach zurückzugeben, wenn sie die gesuchten Informationen enthalten.

Beachten Sie, dass ab Python 2.5 die Methoden get_type (), get_main_type () und get_subtype () entfernt wurden - & gt; Ссылка

    
timbo 22.08.2010 23:04
quelle
0

Es könnte MIME-Multipart

sein

Siehe Ссылка

    
vartec 27.02.2009 12:30
quelle

Tags und Links