8 Stimmen

Python: email get_payload decode schlägt fehl, wenn man auf das Gleichheitszeichen trifft?

Laufen in Seltsamkeit mit get_payload: es scheint zu crap out, wenn es ein Gleichheitszeichen in der Nachricht sieht, die es dekodiert. Hier ist der Code, der den Fehler anzeigt:

import email

data = file('testmessage.txt').read()
msg  = email.message_from_string( data )
payload = msg.get_payload(decode=True)
print payload

Und hier ist eine Beispielnachricht: Testnachricht .

Die Meldung wird nur bis zum ersten "=" gedruckt. Der Rest wird ausgelassen. Weiß jemand, was hier los ist?

Dasselbe Skript mit "decode=False" gibt die vollständige Nachricht zurück, so dass es scheint, dass die Dekodierung mit dem Gleichheitszeichen unglücklich ist.

Dies ist unter Python 2.5.

7voto

RichieHindle Punkte 256891

Sie haben ein Problem mit den Zeilenenden. Der Textkörper Ihrer Testnachricht verwendet bloße Zeilenumbrüche ( \r ) ohne Zeilenumbrüche ( \n ). Wenn Sie die Zeilenenden vor dem Parsen der E-Mail korrigieren, funktioniert alles:

import email, re
data = file('testmessage.txt').read()
data = re.sub(r'\r(?!\n)', '\r\n', data)  # Bare \r becomes \r\n
msg  = email.message_from_string( data )
payload = msg.get_payload(decode=True)
print payload

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X