From e766174fdd014256516e1c46bedecbbcc215eb48 Mon Sep 17 00:00:00 2001 From: Antonio Corroppoli Date: Fri, 14 Aug 2015 14:48:27 +0200 Subject: [PATCH 1/2] Fix UnicodeDecodeError in MessageAttachment headers --- django_mailbox/models.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/django_mailbox/models.py b/django_mailbox/models.py index eb096c8..7dffdf7 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -261,7 +261,7 @@ class Mailbox(models.Model): msg.save() message_received.send(sender=self, message=msg) - + return msg def record_outgoing_message(self, message): @@ -736,7 +736,10 @@ class MessageAttachment(models.Model): if headers is None: return EmailMessage() if sys.version_info < (3, 0): - headers = headers.encode('utf-8') + try: + headers = headers.encode('utf-8') + except UnicodeDecodeError: + headers = unicode(headers, 'utf-8').encode('utf-8') return email.message_from_string(headers) def _set_dehydrated_headers(self, email_object): From 0e6dcce0f5a1e31f26054229e2269431dfda8104 Mon Sep 17 00:00:00 2001 From: Antonio Corroppoli Date: Tue, 18 Aug 2015 17:55:07 +0200 Subject: [PATCH 2/2] Add test for message with not decoded attachment header --- ...age_with_not_decoded_attachment_header.eml | 29 +++++++++++++++++++ django_mailbox/tests/test_process_email.py | 22 ++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 django_mailbox/tests/messages/message_with_not_decoded_attachment_header.eml diff --git a/django_mailbox/tests/messages/message_with_not_decoded_attachment_header.eml b/django_mailbox/tests/messages/message_with_not_decoded_attachment_header.eml new file mode 100644 index 0000000..6347fd9 --- /dev/null +++ b/django_mailbox/tests/messages/message_with_not_decoded_attachment_header.eml @@ -0,0 +1,29 @@ +MIME-Version: 1.0 +Received: by 10.221.0.211 with HTTP; Sun, 20 Jan 2013 12:07:07 -0800 (PST) +X-Originating-IP: [24.22.122.177] +Date: Sun, 20 Jan 2013 12:07:07 -0800 +Delivered-To: test@adamcoddington.net +Message-ID: +Subject: Message With Attachment +From: Adam Coddington +To: Adam Coddington +Content-Type: multipart/mixed; boundary=047d7b33dd729737fe04d3bde348 + +--047d7b33dd729737fe04d3bde348 +Content-Type: text/plain; charset=UTF-8 + +This message has an attachment. + +--047d7b33dd729737fe04d3bde348 +Content-Type: image/png; name="ð̞oβ̞le.png" +Content-Disposition: attachment; filename="ð̞oβ̞le.png" +X-Attachment-Id: f_hc6mair60 +Content-Transfer-Encoding: base64 + +iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAFoTx1HAAAAzUlEQVQoz32RWxXDIBBEr4NIQEIl +ICESkFAJkRAJSIgEpEQCEqYfu6QUkn7sCcyDGQiSACKSKCAkGwBJwhDwZQNMEiYAIBdQvk7rfaHf +AO8NBJwCxTGhtFgTHVNaNaJeWFu44AXEHzKCktc7zZ0vss+bMoHSiM2b9mQoX1eZCgGqnWskY3gi +XXAAxb8BqFiUgBNY7k49Tu/kV7UKPsefrjEOT9GmghYzrk9V03pjDGYKj3d0c06dKZkpTboRaD9o +B+1m2m81d2Az948xzgdjLaFe95e83AAAAABJRU5ErkJggg== + +--047d7b33dd729737fe04d3bde348-- diff --git a/django_mailbox/tests/test_process_email.py b/django_mailbox/tests/test_process_email.py index 3f9b36b..94bb1a0 100644 --- a/django_mailbox/tests/test_process_email.py +++ b/django_mailbox/tests/test_process_email.py @@ -60,6 +60,28 @@ class TestProcessEmail(EmailMessageTestCase): 'heart.png', ) + def test_message_with_not_decoded_attachment_header(self): + email_object = self._get_email_object( + 'message_with_not_decoded_attachment_header.eml', + ) + + mailbox = Mailbox.objects.create() + msg = mailbox.process_incoming_message(email_object) + + expected_count = 1 + actual_count = msg.attachments.count() + + self.assertEqual( + expected_count, + actual_count, + ) + + attachment = msg.attachments.all()[0] + self.assertEqual( + attachment.get_filename(), + u'\xc3\xb0\xcc\x9eo\xce\xb2\xcc\x9ele.png', + ) + def test_message_get_text_body(self): message = self._get_email_object('multipart_text.eml')