From daec7345845ca3349237cee9da0f00ba99f7ce76 Mon Sep 17 00:00:00 2001 From: Karen Tracey Date: Sat, 6 Mar 2010 16:07:05 +0000 Subject: [1.1.X] Fixed #6918, #12791: If an email message has an encoding, actually use that encoding to encode body and headers. Thanks for patch with tests oyvind. Backport of r12683 and r12688 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12689 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/regressiontests/mail/tests.py | 41 ++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py index ad9820866e..7021c99985 100644 --- a/tests/regressiontests/mail/tests.py +++ b/tests/regressiontests/mail/tests.py @@ -106,10 +106,49 @@ BadHeaderError: Header values can't contain newlines (got u'Subject\nInjection T >>> email.message()['To'] '=?utf-8?q?S=C3=BCrname=2C_Firstname?= , other@example.com' +# Regression for #6918 - When a header contains unicode, +# make sure headers can be set with a different encoding than utf-8 +>>> email = EmailMessage('Message from Firstname Sürname', 'Content', 'from@example.com', ['"Sürname, Firstname" ','other@example.com']) +>>> email.encoding = 'iso-8859-1' +>>> email.message()['To'] +'=?iso-8859-1?q?S=FCrname=2C_Firstname?= , other@example.com' +>>> email.message()['Subject'].encode() +u'=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=' + +# Make sure headers can be set with a different encoding than utf-8 in SafeMIMEMultipart as well +>>> headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"} +>>> subject, from_email, to = 'hello', 'from@example.com', '"Sürname, Firstname" ' +>>> text_content = 'This is an important message.' +>>> html_content = '

This is an important message.

' +>>> msg = EmailMultiAlternatives('Message from Firstname Sürname', text_content, from_email, [to], headers=headers) +>>> msg.attach_alternative(html_content, "text/html") +>>> msg.encoding = 'iso-8859-1' +>>> msg.message()['To'] +'=?iso-8859-1?q?S=FCrname=2C_Firstname?= ' +>>> msg.message()['Subject'].encode() +u'=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=' + +# Regression for #12791 - Encode body correctly with other encodings than utf-8 +>>> email = EmailMessage('Subject', 'Firstname Sürname is a great guy.', 'from@example.com', ['other@example.com']) +>>> email.encoding = 'iso-8859-1' +>>> message = email.message() +>>> message.as_string() +'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: from@example.com\nTo: other@example.com\nDate: ...\nMessage-ID: <...>\n\nFirstname S=FCrname is a great guy.' + +# Make sure MIME attachments also works correctly with other encodings than utf-8 +>>> text_content = 'Firstname Sürname is a great guy.' +>>> html_content = '

Firstname Sürname is a great guy.

' +>>> msg = EmailMultiAlternatives('Subject', text_content, 'from@example.com', ['to@example.com']) +>>> msg.encoding = 'iso-8859-1' +>>> msg.attach_alternative(html_content, "text/html") +>>> msg.message().get_payload(0).as_string() +'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\nFirstname S=FCrname is a great guy.' +>>> msg.message().get_payload(1).as_string() +'Content-Type: text/html; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\n

Firstname S=FCrname is a great guy.

' + # Handle attachments within an multipart/alternative mail correctly (#9367) # (test is not as precise/clear as it could be w.r.t. email tree structure, # but it's good enough.) - >>> headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"} >>> subject, from_email, to = 'hello', 'from@example.com', 'to@example.com' >>> text_content = 'This is an important message.' -- cgit v1.3