Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: email get_payload decode fails when hitting equal sign?

Tags:

python

email

Running into strangeness with get_payload: it seems to crap out when it sees an equal sign in the message it's decoding. Here's code that displays the error:

import email

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

And here's a sample message: test message.

The message is printed only until the first "=" . The rest is omitted. Anybody know what's going on?

The same script with "decode=False" returns the full message, so it appears the decode is unhappy with the equal sign.

This is under Python 2.5 .

like image 829
Parand Avatar asked Apr 24 '09 22:04

Parand


1 Answers

You have a line endings problem. The body of your test message uses bare carriage returns (\r) without newlines (\n). If you fix up the line endings before parsing the email, it all works:

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
like image 111
RichieHindle Avatar answered Sep 23 '22 14:09

RichieHindle