Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #11400 -- Passed kwargs from AbstractUser.email_user() to send_…

…mail()

Thanks Jug_ for suggestion, john_scott for the initial patch,
and Tim Graham for code review.
  • Loading branch information...
commit 71c491972eecae8783cf46e69fac7e5f9f83fc59 1 parent 4eeb8ec
@onceuponatimeforever onceuponatimeforever authored timgraham committed
View
1  AUTHORS
@@ -575,6 +575,7 @@ answer newbie questions, and generally made Django that much better:
Aaron Swartz <http://www.aaronsw.com/>
Ville Säävuori <http://www.unessa.net/>
Mart Sõmermaa <http://mrts.pri.ee/>
+ Susan Tan <susan.tan.fleckerl@gmail.com>
Christian Tanzer <tanzer@swing.co.at>
Tyler Tarabula <tyler.tarabula@gmail.com>
Tyson Tate <tyson@fallingbullets.com>
View
4 django/contrib/auth/models.py
@@ -400,11 +400,11 @@ def get_short_name(self):
"Returns the short name for the user."
return self.first_name
- def email_user(self, subject, message, from_email=None):
+ def email_user(self, subject, message, from_email=None, **kwargs):
"""
Sends an email to this User.
"""
- send_mail(subject, message, from_email, [self.email])
+ send_mail(subject, message, from_email, [self.email], **kwargs)
class User(AbstractUser):
View
26 django/contrib/auth/tests/test_models.py
@@ -1,6 +1,7 @@
from django.contrib.auth import get_user_model
-from django.contrib.auth.models import Group, User, UserManager
+from django.contrib.auth.models import AbstractUser, Group, User, UserManager
from django.contrib.auth.tests.utils import skipIfCustomUser
+from django.core import mail
from django.db.models.signals import post_save
from django.test import TestCase
from django.test.utils import override_settings
@@ -73,6 +74,29 @@ def test_empty_username(self):
User.objects.create_user, username='')
+class AbstractUserTestCase(TestCase):
+ def test_email_user(self):
+ # valid send_mail parameters
+ kwargs = {
+ "fail_silently": False,
+ "auth_user": None,
+ "auth_password": None,
+ "connection": None,
+ "html_message": None,
+ }
+ abstract_user = AbstractUser(email='foo@bar.com')
+ abstract_user.email_user(subject="Subject here",
+ message="This is a message", from_email="from@domain.com", **kwargs)
+ # Test that one message has been sent.
+ self.assertEqual(len(mail.outbox), 1)
+ # Verify that test email contains the correct attributes:
+ message = mail.outbox[0]
+ self.assertEqual(message.subject, "Subject here")
+ self.assertEqual(message.body, "This is a message")
+ self.assertEqual(message.from_email, "from@domain.com")
+ self.assertEqual(message.to, [abstract_user.email])
+
+
class IsActiveTestCase(TestCase):
"""
Tests the behavior of the guaranteed is_active attribute
View
7 docs/ref/contrib/auth.txt
@@ -215,11 +215,16 @@ Methods
(the Django app label). If the user is inactive, this method will
always return ``False``.
- .. method:: email_user(subject, message, from_email=None)
+ .. method:: email_user(subject, message, from_email=None, **kwargs)
Sends an email to the user. If ``from_email`` is ``None``, Django uses
the :setting:`DEFAULT_FROM_EMAIL`.
+ .. versionchanged:: 1.7
+
+ Any ``**kwargs`` are passed to the underlying
+ :meth:`~django.core.mail.send_mail()` call.
+
Manager methods
---------------
View
4 docs/releases/1.7.txt
@@ -152,6 +152,10 @@ Minor features
Each radio button or checkbox includes an ``id_for_label`` attribute to
output the element's ID.
+* Any ``**kwargs`` passed to
+ :meth:`~django.contrib.auth.models.User.email_user()` are passed to the
+ underlying :meth:`~django.core.mail.send_mail()` call.
+
Backwards incompatible changes in 1.7
=====================================
Please sign in to comment.
Something went wrong with that request. Please try again.