Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[1.2.X] Fixed #14301 -- Handle email validation gracefully with email…

… addresses containing non-ASCII characters. Thanks, Andi Albrecht.

Backport from trunk (r14216).

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14217 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 7be27dc0836a092f03d7a6f1fc7834ef4f585f18 1 parent ece06a8
@jezdez jezdez authored
View
6 django/core/mail/message.py
@@ -67,7 +67,11 @@ def forbid_multi_line_headers(name, val, encoding):
result = []
for nm, addr in getaddresses((val,)):
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)
else:
val = Header(val.encode(encoding), encoding)
View
15 tests/regressiontests/mail/tests.py
@@ -336,3 +336,18 @@ def test_mail_prefix(self):
settings.ADMINS = old_admins
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=?='))
Please sign in to comment.
Something went wrong with that request. Please try again.