From 90fc76294808b16a86acc9a073435250466932e3 Mon Sep 17 00:00:00 2001 From: Mike Edmunds Date: Fri, 14 Feb 2025 10:31:44 -0800 Subject: [PATCH] Refs #36138 -- Cleaned up duplicate code in mail_admins()/mail_managers(). --- django/core/mail/__init__.py | 60 +++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/django/core/mail/__init__.py b/django/core/mail/__init__.py index b179736b15..374d459c52 100644 --- a/django/core/mail/__init__.py +++ b/django/core/mail/__init__.py @@ -119,19 +119,27 @@ def send_mass_mail( return connection.send_messages(messages) -def mail_admins( - subject, message, fail_silently=False, connection=None, html_message=None +def _send_server_message( + *, + setting_name, + subject, + message, + html_message=None, + fail_silently=False, + connection=None, ): - """Send a message to the admins, as defined by the ADMINS setting.""" - if not settings.ADMINS: + recipients = getattr(settings, setting_name) + if not recipients: 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.") + + if not all(isinstance(a, (list, tuple)) and len(a) == 2 for a in recipients): + raise ValueError(f"The {setting_name} 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], + subject="%s%s" % (settings.EMAIL_SUBJECT_PREFIX, subject), + body=message, + from_email=settings.SERVER_EMAIL, + to=[a[1] for a in recipients], connection=connection, ) if html_message: @@ -139,21 +147,29 @@ def mail_admins( mail.send(fail_silently=fail_silently) +def mail_admins( + subject, message, fail_silently=False, connection=None, html_message=None +): + """Send a message to the admins, as defined by the ADMINS setting.""" + _send_server_message( + setting_name="ADMINS", + subject=subject, + message=message, + html_message=html_message, + fail_silently=fail_silently, + connection=connection, + ) + + def mail_managers( subject, message, fail_silently=False, connection=None, html_message=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], + _send_server_message( + setting_name="MANAGERS", + subject=subject, + message=message, + html_message=html_message, + fail_silently=fail_silently, connection=connection, ) - if html_message: - mail.attach_alternative(html_message, "text/html") - mail.send(fail_silently=fail_silently)