summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormedmunds <medmunds@gmail.com>2015-02-25 13:17:15 -0800
committerTim Graham <timograham@gmail.com>2015-03-13 12:33:49 -0400
commit5993b52e6d9db00259fd5a186b3c3df767fe94e2 (patch)
tree314a37be7044d737904f8325aac0040e7c50aee8
parentd8de9a64d70f4bef7a223da1559638699a7a3923 (diff)
Fixed #24416 -- Added support for lazy email addresses.
-rw-r--r--django/core/mail/message.py8
-rw-r--r--tests/mail/tests.py25
2 files changed, 29 insertions, 4 deletions
diff --git a/django/core/mail/message.py b/django/core/mail/message.py
index 76cd477595..70a7fda1d4 100644
--- a/django/core/mail/message.py
+++ b/django/core/mail/message.py
@@ -101,7 +101,7 @@ def forbid_multi_line_headers(name, val, encoding):
def sanitize_address(addr, encoding):
- if isinstance(addr, six.string_types):
+ if not isinstance(addr, tuple):
addr = parseaddr(force_text(addr))
nm, addr = addr
nm = Header(nm, encoding).encode()
@@ -262,11 +262,11 @@ class EmailMessage(object):
msg = self._create_message(msg)
msg['Subject'] = self.subject
msg['From'] = self.extra_headers.get('From', self.from_email)
- msg['To'] = self.extra_headers.get('To', ', '.join(self.to))
+ msg['To'] = self.extra_headers.get('To', ', '.join(map(force_text, self.to)))
if self.cc:
- msg['Cc'] = ', '.join(self.cc)
+ msg['Cc'] = ', '.join(map(force_text, self.cc))
if self.reply_to:
- msg['Reply-To'] = self.extra_headers.get('Reply-To', ', '.join(self.reply_to))
+ msg['Reply-To'] = self.extra_headers.get('Reply-To', ', '.join(map(force_text, self.reply_to)))
# Email header names are case-insensitive (RFC 2045), so we have to
# accommodate that when doing comparisons.
diff --git a/tests/mail/tests.py b/tests/mail/tests.py
index b6170068fb..75d5dd619b 100644
--- a/tests/mail/tests.py
+++ b/tests/mail/tests.py
@@ -665,6 +665,31 @@ class BaseEmailBackendTests(HeadersCheckMixin, object):
self.assertEqual(message.get('from'), "tester")
self.assertEqual(message.get('to'), "django")
+ def test_lazy_addresses(self):
+ """
+ Email sending should support lazy email addresses (#24416).
+ """
+ _ = ugettext_lazy
+ self.assertTrue(send_mail('Subject', 'Content', _('tester'), [_('django')]))
+ message = self.get_the_message()
+ self.assertEqual(message.get('from'), 'tester')
+ self.assertEqual(message.get('to'), 'django')
+
+ self.flush_mailbox()
+ m = EmailMessage(
+ 'Subject', 'Content', _('tester'), [_('to1'), _('to2')],
+ cc=[_('cc1'), _('cc2')],
+ bcc=[_('bcc')],
+ reply_to=[_('reply')],
+ )
+ self.assertEqual(m.recipients(), ['to1', 'to2', 'cc1', 'cc2', 'bcc'])
+ m.send()
+ message = self.get_the_message()
+ self.assertEqual(message.get('from'), 'tester')
+ self.assertEqual(message.get('to'), 'to1, to2')
+ self.assertEqual(message.get('cc'), 'cc1, cc2')
+ self.assertEqual(message.get('Reply-To'), 'reply')
+
def test_close_connection(self):
"""
Test that connection can be closed (even when not explicitly opened)