diff options
author | Rolo <rolo@wildfish.com> | 2015-06-16 13:46:56 +0100 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2015-06-22 07:21:26 -0400 |
commit | e7b4bd48c7b81718cfae6f30f1868cf45311ca86 (patch) | |
tree | e7d7b83eac078742e5b52c5e0827ec974413200e | |
parent | 1c90a3dccadc7d2da3704ff17ac9ff1a67743934 (diff) | |
download | django-e7b4bd48c7b81718cfae6f30f1868cf45311ca86.tar.gz |
Fixed #24970 -- Added --managers and --admins options to the sendtestemail management command.
-rw-r--r-- | django/core/management/commands/sendtestemail.py | 23 | ||||
-rw-r--r-- | docs/ref/django-admin.txt | 12 | ||||
-rw-r--r-- | tests/mail/test_sendtestemail.py | 67 |
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', + ]) |