diff options
author | Kali Kaneko <kali@leap.se> | 2014-04-09 16:11:23 -0500 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2014-04-09 16:11:23 -0500 |
commit | 4124f7b486ecd1ee90451255bb35c46606ef55e5 (patch) | |
tree | 58205da129e77194d2961bd16996a38bf09cf3ea /src/leap/mail/smtp/rfc3156.py | |
parent | 13f23aaf1433f7f5f5111b81a21ab873b2d975de (diff) | |
parent | 8b1d8e88955fe5c1af8cee973abfdec4043a650c (diff) |
Merge tag '0.3.9' into deb-0.3.9
Tag leap.mail version 0.3.9
Conflicts:
pkg/requirements.pip
Diffstat (limited to 'src/leap/mail/smtp/rfc3156.py')
-rw-r--r-- | src/leap/mail/smtp/rfc3156.py | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/leap/mail/smtp/rfc3156.py b/src/leap/mail/smtp/rfc3156.py index 9739531..62a0675 100644 --- a/src/leap/mail/smtp/rfc3156.py +++ b/src/leap/mail/smtp/rfc3156.py @@ -24,6 +24,7 @@ import base64 from abc import ABCMeta, abstractmethod from StringIO import StringIO +from twisted.python import log from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from email import errors @@ -145,14 +146,26 @@ def encode_base64(msg): :param msg: The non-multipart message to be encoded. :type msg: email.message.Message """ - orig = msg.get_payload() - encdata = _bencode(orig) - msg.set_payload(encdata) - # replace or set the Content-Transfer-Encoding header. - try: - msg.replace_header('Content-Transfer-Encoding', 'base64') - except KeyError: - msg['Content-Transfer-Encoding'] = 'base64' + encoding = msg.get('Content-Transfer-Encoding', None) + if encoding is not None: + encoding = encoding.lower() + # XXX Python's email module can only decode quoted-printable, base64 and + # uuencoded data, so we might have to implement other decoding schemes in + # order to support RFC 3156 properly and correctly calculate signatures + # for multipart attachments (eg. 7bit or 8bit encoded attachments). For + # now, if content is already encoded as base64 or if it is encoded with + # some unknown encoding, we just pass. + if encoding in [None, 'quoted-printable', 'x-uuencode', 'uue', 'x-uue']: + orig = msg.get_payload(decode=True) + encdata = _bencode(orig) + msg.set_payload(encdata) + # replace or set the Content-Transfer-Encoding header. + try: + msg.replace_header('Content-Transfer-Encoding', 'base64') + except KeyError: + msg['Content-Transfer-Encoding'] = 'base64' + elif encoding is not 'base64': + log.err('Unknown content-transfer-encoding: %s' % encoding) def encode_base64_rec(msg): |