get_payload(): Teach this about various uunencoded

Content-Transfer-Encodings
This commit is contained in:
Barry Warsaw 2003-03-11 04:33:30 +00:00
parent 3840b49d9c
commit 08898499b2
1 changed files with 21 additions and 10 deletions

View File

@ -5,6 +5,7 @@
"""
import re
import uu
import binascii
import warnings
from cStringIO import StringIO
@ -165,13 +166,15 @@ class Message:
the list object, you modify the message's payload in place. Optional
i returns that index into the payload.
Optional decode is a flag (defaulting to False) indicating whether the
payload should be decoded or not, according to the
Content-Transfer-Encoding header. When True and the message is not a
multipart, the payload will be decoded if this header's value is
`quoted-printable' or `base64'. If some other encoding is used, or
the header is missing, or if the payload has bogus base64 data, the
payload is returned as-is (undecoded).
Optional decode is a flag indicating whether the payload should be
decoded or not, according to the Content-Transfer-Encoding header
(default is False).
When True and the message is not a multipart, the payload will be
decoded if this header's value is `quoted-printable' or `base64'. If
some other encoding is used, or the header is missing, or if the
payload has bogus data (i.e. bogus base64 or uuencoded data), the
payload is returned as-is.
If the message is a multipart and the decode flag is True, then None
is returned.
@ -185,15 +188,23 @@ class Message:
if decode:
if self.is_multipart():
return None
cte = self.get('content-transfer-encoding', '')
if cte.lower() == 'quoted-printable':
cte = self.get('content-transfer-encoding', '').lower()
if cte == 'quoted-printable':
return Utils._qdecode(payload)
elif cte.lower() == 'base64':
elif cte == 'base64':
try:
return Utils._bdecode(payload)
except binascii.Error:
# Incorrect padding
return payload
elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
sfp = StringIO()
try:
uu.decode(StringIO(payload+'\n'), sfp)
payload = sfp.getvalue()
except uu.Error:
# Some decoding problem
return payload
# Everything else, including encodings with 8bit or 7bit are returned
# unchanged.
return payload