Fixed #24970 -- Added --managers and --admins options to the sendtestemail management command.
This commit is contained in:
parent
1c90a3dcca
commit
e7b4bd48c7
@ -1,21 +1,34 @@
|
|||||||
import datetime
|
|
||||||
import socket
|
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.core.management.base import BaseCommand
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = "Sends a test email to the email addresses specified as arguments."
|
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):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('email', nargs='+',
|
parser.add_argument('email', nargs='*',
|
||||||
help='One or more email addresses to send the test mail to.')
|
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):
|
def handle(self, *args, **kwargs):
|
||||||
|
subject = 'Test email from %s on %s' % (socket.gethostname(), timezone.now())
|
||||||
|
|
||||||
send_mail(
|
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.",
|
message="If you\'re reading this, it was successful.",
|
||||||
from_email=None,
|
from_email=None,
|
||||||
recipient_list=kwargs['email'],
|
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 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
|
shell
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -2,32 +2,83 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.core.management import call_command
|
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):
|
class SendTestEmailManagementCommand(SimpleTestCase):
|
||||||
"""
|
"""
|
||||||
Test the sending of a test email using the `sendtestemail` command.
|
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.
|
The mail is sent with the correct subject and recipient.
|
||||||
"""
|
"""
|
||||||
recipient = "joe@example.com"
|
recipient = 'joe@example.com'
|
||||||
call_command("sendtestemail", recipient)
|
call_command('sendtestemail', recipient)
|
||||||
self.assertEqual(len(mail.outbox), 1)
|
self.assertEqual(len(mail.outbox), 1)
|
||||||
mail_message = mail.outbox[0]
|
mail_message = mail.outbox[0]
|
||||||
self.assertEqual(mail_message.subject[0:15], 'Test email from')
|
self.assertEqual(mail_message.subject[0:15], 'Test email from')
|
||||||
self.assertEqual(mail_message.recipients(), [recipient])
|
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.
|
The mail may be sent with multiple recipients.
|
||||||
"""
|
"""
|
||||||
recipients = ["joe@example.com", "jane@example.com"]
|
recipients = ['joe@example.com', 'jane@example.com']
|
||||||
call_command("sendtestemail", recipients[0], recipients[1])
|
call_command('sendtestemail', recipients[0], recipients[1])
|
||||||
self.assertEqual(len(mail.outbox), 1)
|
self.assertEqual(len(mail.outbox), 1)
|
||||||
mail_message = mail.outbox[0]
|
mail_message = mail.outbox[0]
|
||||||
self.assertEqual(mail_message.subject[0:15], 'Test email from')
|
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',
|
||||||
|
])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user