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.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@11719 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2009-11-04 11:24:56 +00:00
parent b59aa81d68
commit dd5d7622a5
2 changed files with 13 additions and 3 deletions

View File

@ -7,7 +7,7 @@ from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase from email.MIMEBase import MIMEBase
from email.Header import Header 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.conf import settings
from django.core.mail.utils import DNS_NAME from django.core.mail.utils import DNS_NAME
@ -64,8 +64,7 @@ def forbid_multi_line_headers(name, val):
except UnicodeEncodeError: except UnicodeEncodeError:
if name.lower() in ('to', 'from', 'cc'): if name.lower() in ('to', 'from', 'cc'):
result = [] result = []
for item in val.split(', '): for nm, addr in getaddresses((val,)):
nm, addr = parseaddr(item)
nm = str(Header(nm, settings.DEFAULT_CHARSET)) nm = str(Header(nm, settings.DEFAULT_CHARSET))
result.append(formataddr((nm, str(addr)))) result.append(formataddr((nm, str(addr))))
val = ', '.join(result) val = ', '.join(result)

View File

@ -101,6 +101,17 @@ BadHeaderError: Header values can't contain newlines (got u'Subject\nInjection T
>>> message['From'] >>> message['From']
'from@example.com' '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) # 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, # (test is not as precise/clear as it could be w.r.t. email tree structure,
# but it's good enough.) # but it's good enough.)