mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-21 04:11:06 -05:00
Merge pull request #65 from winhamwr/unicode_attachments
`UnicodeEncodeError` with unicode attachments
This commit is contained in:
@@ -294,15 +294,18 @@ class DjrillBackend(BaseEmailBackend):
|
||||
if mimetype is None:
|
||||
mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
|
||||
|
||||
# b64encode requires bytes, so let's convert our content.
|
||||
try:
|
||||
content_b64 = b64encode(content)
|
||||
except TypeError:
|
||||
# Python 3 b64encode requires bytes. Convert str attachment:
|
||||
if isinstance(content, unicode):
|
||||
# Python 2.X unicode string
|
||||
content = content.encode(str_encoding)
|
||||
except NameError:
|
||||
# Python 3 doesn't differentiate between strings and unicode
|
||||
# Convert python3 unicode str to bytes attachment:
|
||||
if isinstance(content, str):
|
||||
content_bytes = content.encode(str_encoding)
|
||||
content_b64 = b64encode(content_bytes)
|
||||
else:
|
||||
raise
|
||||
content = content.encode(str_encoding)
|
||||
|
||||
content_b64 = b64encode(content)
|
||||
|
||||
mandrill_attachment = {
|
||||
'type': mimetype,
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from base64 import b64decode
|
||||
from datetime import date, datetime, timedelta, tzinfo
|
||||
from email.mime.base import MIMEBase
|
||||
@@ -177,6 +181,23 @@ class DjrillBackendTests(DjrillBackendMockAPITestCase):
|
||||
# Make sure the image attachment is not treated as embedded:
|
||||
self.assertFalse('images' in data['message'])
|
||||
|
||||
def test_unicode_attachment_correctly_decoded(self):
|
||||
msg = mail.EmailMessage(
|
||||
subject='Subject',
|
||||
body='Body goes here',
|
||||
from_email='from@example.com',
|
||||
to=['to1@example.com'],
|
||||
)
|
||||
# Slight modification from the Django unicode docs:
|
||||
# http://django.readthedocs.org/en/latest/ref/unicode.html#email
|
||||
msg.attach("Une pièce jointe.html", '<p>\u2019</p>', mimetype='text/html')
|
||||
|
||||
msg.send()
|
||||
data = self.get_api_call_data()
|
||||
|
||||
attachments = data['message']['attachments']
|
||||
self.assertEqual(len(attachments), 1)
|
||||
|
||||
def test_embedded_images(self):
|
||||
image_data = self.sample_image_content() # Read from a png file
|
||||
image_cid = make_msgid("img") # Content ID per RFC 2045 section 7 (with <...>)
|
||||
|
||||
Reference in New Issue
Block a user