Kaydet (Commit) 08898499 authored tarafından Barry Warsaw's avatar Barry Warsaw

get_payload(): Teach this about various uunencoded

Content-Transfer-Encodings
üst 3840b49d
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
""" """
import re import re
import uu
import binascii import binascii
import warnings import warnings
from cStringIO import StringIO from cStringIO import StringIO
...@@ -165,13 +166,15 @@ class Message: ...@@ -165,13 +166,15 @@ class Message:
the list object, you modify the message's payload in place. Optional the list object, you modify the message's payload in place. Optional
i returns that index into the payload. i returns that index into the payload.
Optional decode is a flag (defaulting to False) indicating whether the Optional decode is a flag indicating whether the payload should be
payload should be decoded or not, according to the decoded or not, according to the Content-Transfer-Encoding header
Content-Transfer-Encoding header. When True and the message is not a (default is False).
multipart, the payload will be decoded if this header's value is
`quoted-printable' or `base64'. If some other encoding is used, or When True and the message is not a multipart, the payload will be
the header is missing, or if the payload has bogus base64 data, the decoded if this header's value is `quoted-printable' or `base64'. If
payload is returned as-is (undecoded). 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 If the message is a multipart and the decode flag is True, then None
is returned. is returned.
...@@ -185,15 +188,23 @@ class Message: ...@@ -185,15 +188,23 @@ class Message:
if decode: if decode:
if self.is_multipart(): if self.is_multipart():
return None return None
cte = self.get('content-transfer-encoding', '') cte = self.get('content-transfer-encoding', '').lower()
if cte.lower() == 'quoted-printable': if cte == 'quoted-printable':
return Utils._qdecode(payload) return Utils._qdecode(payload)
elif cte.lower() == 'base64': elif cte == 'base64':
try: try:
return Utils._bdecode(payload) return Utils._bdecode(payload)
except binascii.Error: except binascii.Error:
# Incorrect padding # Incorrect padding
return payload 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 # Everything else, including encodings with 8bit or 7bit are returned
# unchanged. # unchanged.
return payload return payload
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment