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): 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 271cb38..b7f5308 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')