mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #24970 -- Added --managers and --admins options to the sendtestemail management command.
This commit is contained in:
		| @@ -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.") | ||||
|   | ||||
| @@ -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 | ||||
| ----- | ||||
|  | ||||
|   | ||||
| @@ -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', | ||||
|         ]) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user