diff --git a/django/core/mail/message.py b/django/core/mail/message.py index 3ec29c36a8..39f7afc61b 100644 --- a/django/core/mail/message.py +++ b/django/core/mail/message.py @@ -215,7 +215,7 @@ class EmailMessage(object): msg = self._create_message(msg) msg['Subject'] = self.subject msg['From'] = self.extra_headers.get('From', self.from_email) - msg['To'] = ', '.join(self.to) + msg['To'] = self.extra_headers.get('To', ', '.join(self.to)) if self.cc: msg['Cc'] = ', '.join(self.cc) @@ -227,7 +227,7 @@ class EmailMessage(object): if 'message-id' not in header_names: msg['Message-ID'] = make_msgid() for name, value in self.extra_headers.items(): - if name.lower() == 'from': # From is already handled + if name.lower() in ('from', 'to'): # From and To are already handled continue msg[name] = value return msg diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py index ac97f1573a..52e251f3ee 100644 --- a/tests/regressiontests/mail/tests.py +++ b/tests/regressiontests/mail/tests.py @@ -96,6 +96,24 @@ class MailTests(TestCase): message = email.message() self.assertEqual(message['From'], 'from@example.com') + def test_to_header(self): + """ + Make sure we can manually set the To header (#17444) + """ + email = EmailMessage('Subject', 'Content', 'bounce@example.com', + ['list-subscriber@example.com', 'list-subscriber2@example.com'], + headers={'To': 'mailing-list@example.com'}) + message = email.message() + self.assertEqual(message['To'], 'mailing-list@example.com') + self.assertEqual(email.to, ['list-subscriber@example.com', 'list-subscriber2@example.com']) + + # If we don't set the To header manually, it should default to the `to` argument to the constructor + email = EmailMessage('Subject', 'Content', 'bounce@example.com', + ['list-subscriber@example.com', 'list-subscriber2@example.com']) + message = email.message() + self.assertEqual(message['To'], 'list-subscriber@example.com, list-subscriber2@example.com') + self.assertEqual(email.to, ['list-subscriber@example.com', 'list-subscriber2@example.com']) + def test_multiple_message_call(self): """ Regression for #13259 - Make sure that headers are not changed when