Fixed #14301 -- Handle email validation gracefully with email addresses containing non-ASCII characters. Thanks, Andi Albrecht.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14216 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jannis Leidel 2010-10-14 18:37:05 +00:00
parent 767cf955d2
commit 36f2f7ee7c
2 changed files with 20 additions and 1 deletions

View File

@ -67,7 +67,11 @@ def forbid_multi_line_headers(name, val, encoding):
result = [] result = []
for nm, addr in getaddresses((val,)): for nm, addr in getaddresses((val,)):
nm = str(Header(nm.encode(encoding), encoding)) nm = str(Header(nm.encode(encoding), encoding))
result.append(formataddr((nm, str(addr)))) try:
addr = addr.encode('ascii')
except UnicodeEncodeError: # IDN
addr = str(Header(addr.encode(encoding), encoding))
result.append(formataddr((nm, addr)))
val = ', '.join(result) val = ', '.join(result)
else: else:
val = Header(val.encode(encoding), encoding) val = Header(val.encode(encoding), encoding)

View File

@ -363,3 +363,18 @@ class MailTests(TestCase):
settings.ADMINS = old_admins settings.ADMINS = old_admins
settings.MANAGERS = old_managers settings.MANAGERS = old_managers
def test_idn_validation(self):
"""Test internationalized email adresses"""
# Regression for #14301.
mail.outbox = []
from_email = u'fröm@öäü.com'
to_email = u'tö@öäü.com'
connection = mail.get_connection('django.core.mail.backends.locmem.EmailBackend')
send_mail('Subject', 'Content', from_email, [to_email], connection=connection)
self.assertEqual(len(mail.outbox), 1)
message = mail.outbox[0]
self.assertEqual(message.subject, 'Subject')
self.assertEqual(message.from_email, from_email)
self.assertEqual(message.to, [to_email])
self.assertTrue(message.message().as_string().startswith('Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: =?utf-8?b?ZnLDtm1Aw7bDpMO8LmNvbQ==?=\nTo: =?utf-8?b?dMO2QMO2w6TDvC5jb20=?='))