diff options
| author | Ramiro Morales <cramm0@gmail.com> | 2012-01-15 02:33:31 +0000 |
|---|---|---|
| committer | Ramiro Morales <cramm0@gmail.com> | 2012-01-15 02:33:31 +0000 |
| commit | 665ec600a40ffc3c9baea30be9c8765939512748 (patch) | |
| tree | a558e8694a93d4b97de4abc7857c71ba440ad570 | |
| parent | c5dcba4159e00ed7fc43b605946be489602ab369 (diff) | |
Made email attachment handling code accept non-ASCII filenames.
Thanks to Anton Chaporgin for the report and to Claude Paroz for the patch.
Fixes #14964.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17375 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/core/mail/message.py | 4 | ||||
| -rw-r--r-- | docs/ref/unicode.txt | 4 | ||||
| -rw-r--r-- | tests/regressiontests/mail/tests.py | 13 |
3 files changed, 20 insertions, 1 deletions
diff --git a/django/core/mail/message.py b/django/core/mail/message.py index 39f7afc61b..7347391f0b 100644 --- a/django/core/mail/message.py +++ b/django/core/mail/message.py @@ -311,6 +311,10 @@ class EmailMessage(object): mimetype = DEFAULT_ATTACHMENT_MIME_TYPE attachment = self._create_mime_attachment(content, mimetype) if filename: + try: + filename = filename.encode('ascii') + except UnicodeEncodeError: + filename = ('utf-8', '', filename.encode('utf-8')) attachment.add_header('Content-Disposition', 'attachment', filename=filename) return attachment diff --git a/docs/ref/unicode.txt b/docs/ref/unicode.txt index 08f738c879..1286dcfdd0 100644 --- a/docs/ref/unicode.txt +++ b/docs/ref/unicode.txt @@ -322,7 +322,9 @@ can be non-ASCII:: sender = u'Arnbjörg Ráðormsdóttir <arnbjorg@example.com>' recipients = ['Fred <fred@example.com'] body = u'...' - EmailMessage(subject, body, sender, recipients).send() + msg = EmailMessage(subject, body, sender, recipients) + msg.attach(u"Une pièce jointe.pdf", "%PDF-1.4.%...", mimetype="application/pdf") + msg.send() Form submission =============== diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py index 52e251f3ee..ed85918f17 100644 --- a/tests/regressiontests/mail/tests.py +++ b/tests/regressiontests/mail/tests.py @@ -198,6 +198,19 @@ class MailTests(TestCase): self.assertEqual(payload[0].get_content_type(), 'multipart/alternative') self.assertEqual(payload[1].get_content_type(), 'application/pdf') + def test_non_ascii_attachment_filename(self): + """Regression test for #14964""" + headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"} + subject, from_email, to = 'hello', 'from@example.com', 'to@example.com' + content = 'This is the message.' + msg = EmailMessage(subject, content, from_email, [to], headers=headers) + # Unicode in file name + msg.attach(u"une pièce jointe.pdf", "%PDF-1.4.%...", mimetype="application/pdf") + msg_str = msg.message().as_string() + message = email.message_from_string(msg_str) + payload = message.get_payload() + self.assertEqual(payload[1].get_filename(), u'une pièce jointe.pdf') + def test_dummy_backend(self): """ Make sure that dummy backends returns correct number of sent messages |
