summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/mail/__init__.py4
-rw-r--r--tests/mail/tests.py17
-rw-r--r--tests/middleware/tests.py2
3 files changed, 22 insertions, 1 deletions
diff --git a/django/core/mail/__init__.py b/django/core/mail/__init__.py
index 05c8c6a1b1..d17058b0d4 100644
--- a/django/core/mail/__init__.py
+++ b/django/core/mail/__init__.py
@@ -91,6 +91,8 @@ def mail_admins(subject, message, fail_silently=False, connection=None,
"""Send a message to the admins, as defined by the ADMINS setting."""
if not settings.ADMINS:
return
+ if not all(isinstance(a, (list, tuple)) and len(a) == 2 for a in settings.ADMINS):
+ raise ValueError('The ADMINS setting must be a list of 2-tuples.')
mail = EmailMultiAlternatives(
'%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message,
settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS],
@@ -106,6 +108,8 @@ def mail_managers(subject, message, fail_silently=False, connection=None,
"""Send a message to the managers, as defined by the MANAGERS setting."""
if not settings.MANAGERS:
return
+ if not all(isinstance(a, (list, tuple)) and len(a) == 2 for a in settings.MANAGERS):
+ raise ValueError('The MANAGERS setting must be a list of 2-tuples.')
mail = EmailMultiAlternatives(
'%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message,
settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS],
diff --git a/tests/mail/tests.py b/tests/mail/tests.py
index a36c09b369..15593dc3f7 100644
--- a/tests/mail/tests.py
+++ b/tests/mail/tests.py
@@ -991,6 +991,23 @@ class BaseEmailBackendTests(HeadersCheckMixin):
mail_managers('hi', 'there')
self.assertEqual(self.get_mailbox_content(), [])
+ def test_wrong_admins_managers(self):
+ tests = (
+ 'test@example.com',
+ ('test@example.com',),
+ ['test@example.com', 'other@example.com'],
+ ('test@example.com', 'other@example.com'),
+ )
+ for setting, mail_func in (
+ ('ADMINS', mail_admins),
+ ('MANAGERS', mail_managers),
+ ):
+ msg = 'The %s setting must be a list of 2-tuples.' % setting
+ for value in tests:
+ with self.subTest(setting=setting, value=value), self.settings(**{setting: value}):
+ with self.assertRaisesMessage(ValueError, msg):
+ mail_func('subject', 'content')
+
def test_message_cc_header(self):
"""
Regression test for #7722
diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py
index 2da1e11a4e..971fe0a74a 100644
--- a/tests/middleware/tests.py
+++ b/tests/middleware/tests.py
@@ -340,7 +340,7 @@ class CommonMiddlewareTest(SimpleTestCase):
@override_settings(
IGNORABLE_404_URLS=[re.compile(r'foo')],
- MANAGERS=['PHB@dilbert.com'],
+ MANAGERS=[('PHD', 'PHB@dilbert.com')],
)
class BrokenLinkEmailsMiddlewareTest(SimpleTestCase):