summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRolo <rolo@wildfish.com>2015-06-16 13:46:56 +0100
committerTim Graham <timograham@gmail.com>2015-06-22 07:21:26 -0400
commite7b4bd48c7b81718cfae6f30f1868cf45311ca86 (patch)
treee7d7b83eac078742e5b52c5e0827ec974413200e
parent1c90a3dccadc7d2da3704ff17ac9ff1a67743934 (diff)
downloaddjango-e7b4bd48c7b81718cfae6f30f1868cf45311ca86.tar.gz
Fixed #24970 -- Added --managers and --admins options to the sendtestemail management command.
-rw-r--r--django/core/management/commands/sendtestemail.py23
-rw-r--r--docs/ref/django-admin.txt12
-rw-r--r--tests/mail/test_sendtestemail.py67
3 files changed, 89 insertions, 13 deletions
diff --git a/django/core/management/commands/sendtestemail.py b/django/core/management/commands/sendtestemail.py
index 36e33ffa2f..3e3b40a959 100644
--- a/django/core/management/commands/sendtestemail.py
+++ b/django/core/management/commands/sendtestemail.py
@@ -1,21 +1,34 @@
-import datetime
import socket
-from django.core.mail import send_mail
+from django.core.mail import mail_admins, mail_managers, send_mail
from django.core.management.base import BaseCommand
+from django.utils import timezone
class Command(BaseCommand):
help = "Sends a test email to the email addresses specified as arguments."
+ missing_args_message = "You must specify some email recipients, or pass the --managers or --admin options."
def add_arguments(self, parser):
- parser.add_argument('email', nargs='+',
- help='One or more email addresses to send the test mail to.')
+ parser.add_argument('email', nargs='*',
+ help='One or more email addresses to send a test email to.')
+ parser.add_argument('--managers', action='store_true', dest='managers', default=False,
+ help='Send a test email to the addresses specified in settings.MANAGERS.')
+ parser.add_argument('--admins', action='store_true', dest='admins', default=False,
+ help='Send a test email to the addresses specified in settings.ADMINS.')
def handle(self, *args, **kwargs):
+ subject = 'Test email from %s on %s' % (socket.gethostname(), timezone.now())
+
send_mail(
- subject='Test email from %s on %s' % (socket.gethostname(), datetime.datetime.now()),
+ subject=subject,
message="If you\'re reading this, it was successful.",
from_email=None,
recipient_list=kwargs['email'],
)
+
+ if kwargs['managers']:
+ mail_managers(subject, "This email was sent to the site managers.")
+
+ if kwargs['admins']:
+ mail_admins(subject, "This email was sent to the site admins.")
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index d55b748eed..59c7cb03cb 100644
--- a/docs/ref/django-admin.txt
+++ b/docs/ref/django-admin.txt
@@ -902,6 +902,18 @@ recipient(s) specified. For example::
django-admin sendtestemail foo@example.com bar@example.com
+.. django-admin-option:: --managers
+
+Use the ``--managers`` option to mail the email addresses specified in
+:setting:`MANAGERS` using :meth:`~django.core.mail.mail_managers()`.
+
+.. django-admin-option:: --admins
+
+Use the ``--admins`` option to mail the email addresses specified in
+:setting:`ADMINS` using :meth:`~django.core.mail.mail_admins()`.
+
+Note that you may use any combination of these options together.
+
shell
-----
diff --git a/tests/mail/test_sendtestemail.py b/tests/mail/test_sendtestemail.py
index ccf04f9d77..b1494bf3df 100644
--- a/tests/mail/test_sendtestemail.py
+++ b/tests/mail/test_sendtestemail.py
@@ -2,32 +2,83 @@ from __future__ import unicode_literals
from django.core import mail
from django.core.management import call_command
-from django.test import SimpleTestCase
+from django.test import SimpleTestCase, override_settings
+@override_settings(
+ ADMINS=(('Admin', 'admin@example.com'), ('Admin and Manager', 'admin_and_manager@example.com')),
+ MANAGERS=(('Manager', 'manager@example.com'), ('Admin and Manager', 'admin_and_manager@example.com')),
+)
class SendTestEmailManagementCommand(SimpleTestCase):
"""
Test the sending of a test email using the `sendtestemail` command.
"""
- def test_send_test_email(self):
+ def test_single_receiver(self):
"""
The mail is sent with the correct subject and recipient.
"""
- recipient = "joe@example.com"
- call_command("sendtestemail", recipient)
+ recipient = 'joe@example.com'
+ call_command('sendtestemail', recipient)
self.assertEqual(len(mail.outbox), 1)
mail_message = mail.outbox[0]
self.assertEqual(mail_message.subject[0:15], 'Test email from')
self.assertEqual(mail_message.recipients(), [recipient])
- def test_send_test_email_with_multiple_addresses(self):
+ def test_multiple_receivers(self):
"""
The mail may be sent with multiple recipients.
"""
- recipients = ["joe@example.com", "jane@example.com"]
- call_command("sendtestemail", recipients[0], recipients[1])
+ recipients = ['joe@example.com', 'jane@example.com']
+ call_command('sendtestemail', recipients[0], recipients[1])
self.assertEqual(len(mail.outbox), 1)
mail_message = mail.outbox[0]
self.assertEqual(mail_message.subject[0:15], 'Test email from')
- self.assertEqual(mail_message.recipients(), recipients)
+ self.assertEqual(sorted(mail_message.recipients()), [
+ 'jane@example.com',
+ 'joe@example.com',
+ ])
+
+ def test_manager_receivers(self):
+ """
+ The mail should be sent to the email addresses specified in
+ settings.MANAGERS.
+ """
+ call_command('sendtestemail', '--managers')
+ self.assertEqual(len(mail.outbox), 1)
+ mail_message = mail.outbox[0]
+ self.assertEqual(sorted(mail_message.recipients()), [
+ 'admin_and_manager@example.com',
+ 'manager@example.com',
+ ])
+
+ def test_admin_receivers(self):
+ """
+ The mail should be sent to the email addresses specified in
+ settings.ADMIN.
+ """
+ call_command('sendtestemail', '--admins')
+ self.assertEqual(len(mail.outbox), 1)
+ mail_message = mail.outbox[0]
+ self.assertEqual(sorted(mail_message.recipients()), [
+ 'admin@example.com',
+ 'admin_and_manager@example.com',
+ ])
+
+ def test_manager_and_admin_receivers(self):
+ """
+ The mail should be sent to the email addresses specified in both
+ settings.MANAGERS and settings.ADMINS.
+ """
+ call_command('sendtestemail', '--managers', '--admins')
+ self.assertEqual(len(mail.outbox), 2)
+ manager_mail = mail.outbox[0]
+ self.assertEqual(sorted(manager_mail.recipients()), [
+ 'admin_and_manager@example.com',
+ 'manager@example.com',
+ ])
+ admin_mail = mail.outbox[1]
+ self.assertEqual(sorted(admin_mail.recipients()), [
+ 'admin@example.com',
+ 'admin_and_manager@example.com',
+ ])