diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2009-11-04 11:28:56 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2009-11-04 11:28:56 +0000 |
| commit | abd4344efe6bc9b138595a7d15998a0cbce5b9cf (patch) | |
| tree | 8e17f439b1b683d3bebb68b48e8ace7c2beaf083 | |
| parent | 9a38c1cdb2b04ab62d46ee3fcc709680ca5d74ed (diff) | |
[1.1.X] Fixed #11144 -- When a to/from/cc header contains unicode, make sure the email addresses are parsed correctly (especially with regards to commas). Thanks to rmt for the patch.
Backport of r11719 from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@11720 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/core/mail.py | 5 | ||||
| -rw-r--r-- | tests/regressiontests/mail/tests.py | 11 |
2 files changed, 13 insertions, 3 deletions
diff --git a/django/core/mail.py b/django/core/mail.py index 9eeb3429a6..a6b5449ce4 100644 --- a/django/core/mail.py +++ b/django/core/mail.py @@ -13,7 +13,7 @@ from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.Header import Header -from email.Utils import formatdate, parseaddr, formataddr +from email.Utils import formatdate, getaddresses, formataddr from django.conf import settings from django.utils.encoding import smart_str, force_unicode @@ -79,8 +79,7 @@ def forbid_multi_line_headers(name, val): except UnicodeEncodeError: if name.lower() in ('to', 'from', 'cc'): result = [] - for item in val.split(', '): - nm, addr = parseaddr(item) + for nm, addr in getaddresses((val,)): nm = str(Header(nm, settings.DEFAULT_CHARSET)) result.append(formataddr((nm, str(addr)))) val = ', '.join(result) diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py index e90d77366f..ad9820866e 100644 --- a/tests/regressiontests/mail/tests.py +++ b/tests/regressiontests/mail/tests.py @@ -95,6 +95,17 @@ BadHeaderError: Header values can't contain newlines (got u'Subject\nInjection T >>> message['From'] 'from@example.com' +# Regression for #11144 - When a to/from/cc header contains unicode, +# make sure the email addresses are parsed correctly (especially +# with regards to commas) +>>> email = EmailMessage('Subject', 'Content', 'from@example.com', ['"Firstname Sürname" <to@example.com>','other@example.com']) +>>> email.message()['To'] +'=?utf-8?q?Firstname_S=C3=BCrname?= <to@example.com>, other@example.com' + +>>> email = EmailMessage('Subject', 'Content', 'from@example.com', ['"Sürname, Firstname" <to@example.com>','other@example.com']) +>>> email.message()['To'] +'=?utf-8?q?S=C3=BCrname=2C_Firstname?= <to@example.com>, other@example.com' + # 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.) |
