Commit 5993b52e authored by medmunds's avatar medmunds Committed by Tim Graham
Browse files

Fixed #24416 -- Added support for lazy email addresses.

parent d8de9a64
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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.
+25 −0
Original line number Diff line number Diff line
@@ -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)