Fixed #24419 -- Added sendtestemail management command

This commit is contained in:
Loek van Gent 2015-03-07 13:55:59 +01:00 committed by Tim Graham
parent 55f12f8709
commit d898ba1bec
6 changed files with 79 additions and 1 deletions

View File

@ -408,6 +408,7 @@ answer newbie questions, and generally made Django that much better:
lerouxb@gmail.com
Liang Feng <hutuworm@gmail.com>
limodou
Loek van Gent <loek@barakken.nl>
Loïc Bistuer <loic.bistuer@sixmedia.com>
Lowe Thiderman <lowe.thiderman@gmail.com>
Luan Pablo <luanpab@gmail.com>

View File

@ -0,0 +1,20 @@
import datetime
import socket
from django.core.mail import send_mail
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
help = "Sends a test email to the email addresses specified as arguments."
args = "<email1 email2 ...>"
def handle(self, *args, **kwargs):
if not args:
raise CommandError('You must provide at least one destination email.')
send_mail(
subject='Test email from %s on %s' % (socket.gethostname(), datetime.datetime.now()),
message="If you\'re reading this, it was successful.",
from_email=None,
recipient_list=args,
)

View File

@ -875,6 +875,18 @@ By default, the development server doesn't serve any static files for your site
you want to configure Django to serve static media, read
:doc:`/howto/static-files/index`.
sendtestemail
-------------
.. django-admin:: sendtestemail
.. versionadded:: 1.9
Sends a test email (to confirm email sending through Django is working) to the
recipient(s) specified. For example::
django-admin sendtestemail foo@example.com bar@example.com
shell
-----

View File

@ -146,7 +146,8 @@ Internationalization
Management Commands
^^^^^^^^^^^^^^^^^^^
* ...
* The new :djadmin:`sendtestemail` command lets you send a test email to
easily confirm that email sending through Django is working.
Models
^^^^^^

View File

@ -682,6 +682,7 @@ screenshots
sdist
semimajor
semiminor
sendtestemail
serializability
serializable
serializer

View File

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.core import mail
from django.core.management import call_command
from django.core.management.base import CommandError
from django.test import SimpleTestCase
from django.utils.six import StringIO
class SendTestEmailManagementCommand(SimpleTestCase):
"""
Test the sending of a test email using the `sendtestemail` command.
"""
def test_send_test_email(self):
"""
The mail is sent with the correct subject and recipient.
"""
recipient = "joe@somewhere.org"
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):
"""
The mail may be sent with multiple recipients.
"""
recipients = ["joe@somewhere.org", "jane@elsewhere.net"]
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)
def test_send_test_email_missing_recipient(self):
"""
A CommandError is raised if no recipients are specified.
"""
with self.assertRaisesMessage(CommandError, 'You must provide at least one destination email'):
call_command("sendtestemail")