|
@@ -3,6 +3,7 @@ from __future__ import unicode_literals
|
|
|
from collections import OrderedDict
|
|
|
|
|
|
from django import forms
|
|
|
+from django.core.mail import EmailMultiAlternatives
|
|
|
from django.forms.utils import flatatt
|
|
|
from django.template import loader
|
|
|
from django.utils.encoding import force_bytes
|
|
@@ -230,6 +231,23 @@ class AuthenticationForm(forms.Form):
|
|
|
class PasswordResetForm(forms.Form):
|
|
|
email = forms.EmailField(label=_("Email"), max_length=254)
|
|
|
|
|
|
+ def send_mail(self, subject_template_name, email_template_name,
|
|
|
+ context, from_email, to_email, html_email_template_name=None):
|
|
|
+ """
|
|
|
+ Sends a django.core.mail.EmailMultiAlternatives to `to_email`.
|
|
|
+ """
|
|
|
+ subject = loader.render_to_string(subject_template_name, context)
|
|
|
+ # Email subject *must not* contain newlines
|
|
|
+ subject = ''.join(subject.splitlines())
|
|
|
+ body = loader.render_to_string(email_template_name, context)
|
|
|
+
|
|
|
+ email_message = EmailMultiAlternatives(subject, body, from_email, [to_email])
|
|
|
+ if html_email_template_name is not None:
|
|
|
+ html_email = loader.render_to_string(html_email_template_name, context)
|
|
|
+ email_message.attach_alternative(html_email, 'text/html')
|
|
|
+
|
|
|
+ email_message.send()
|
|
|
+
|
|
|
def save(self, domain_override=None,
|
|
|
subject_template_name='registration/password_reset_subject.txt',
|
|
|
email_template_name='registration/password_reset_email.html',
|
|
@@ -239,7 +257,6 @@ class PasswordResetForm(forms.Form):
|
|
|
Generates a one-use only link for resetting password and sends to the
|
|
|
user.
|
|
|
"""
|
|
|
- from django.core.mail import send_mail
|
|
|
UserModel = get_user_model()
|
|
|
email = self.cleaned_data["email"]
|
|
|
active_users = UserModel._default_manager.filter(
|
|
@@ -255,7 +272,7 @@ class PasswordResetForm(forms.Form):
|
|
|
domain = current_site.domain
|
|
|
else:
|
|
|
site_name = domain = domain_override
|
|
|
- c = {
|
|
|
+ context = {
|
|
|
'email': user.email,
|
|
|
'domain': domain,
|
|
|
'site_name': site_name,
|
|
@@ -264,16 +281,10 @@ class PasswordResetForm(forms.Form):
|
|
|
'token': token_generator.make_token(user),
|
|
|
'protocol': 'https' if use_https else 'http',
|
|
|
}
|
|
|
- subject = loader.render_to_string(subject_template_name, c)
|
|
|
- # Email subject *must not* contain newlines
|
|
|
- subject = ''.join(subject.splitlines())
|
|
|
- email = loader.render_to_string(email_template_name, c)
|
|
|
|
|
|
- if html_email_template_name:
|
|
|
- html_email = loader.render_to_string(html_email_template_name, c)
|
|
|
- else:
|
|
|
- html_email = None
|
|
|
- send_mail(subject, email, from_email, [user.email], html_message=html_email)
|
|
|
+ self.send_mail(subject_template_name, email_template_name,
|
|
|
+ context, from_email, user.email,
|
|
|
+ html_email_template_name=html_email_template_name)
|
|
|
|
|
|
|
|
|
class SetPasswordForm(forms.Form):
|