【发布时间】:2021-02-27 05:08:57
【问题描述】:
我找到了一个关于如何在使用 tutorial. 重置密码时包含用户名的教程 我的问题是如何在 PasswordResetView 中自定义电子邮件发送功能?我已经有自己的自定义电子邮件发送功能,但我不知道如何连接它。另一件事是,发送电子邮件时,FROM 部分没有使用我在 settings.py 中设置的主机
更新:我在表单中添加了这个 send_email 功能。从我的角度来看,我该如何触发?
settings.py:
EMAIL_HOST = 'smtp.mailtrap.io'
EMAIL_HOST_USER = 'xxxxxxx'
EMAIL_HOST_PASSWORD = 'xxxxxxxx'
EMAIL_PORT = '2525'
我如何发送电子邮件:
def SendEmail(mail_subject, mail_message, mail_to):
context = {}
try:
send_mail(mail_subject, mail_message, settings.EMAIL_HOST_USER, [mail_to], html_message=mail_message, fail_silently=False)
return HttpResponse("SUCCESS")
except BadHeaderError:
context['message'] = "Email has encountered some problems."
return HttpResponse("SUCCESS")
forms.py:
class MyPasswordResetForm(PasswordResetForm):
username = forms.CharField(max_length=254)
field_order = ['username', 'email']
def __init__(self, *args, **kwargs):
super(MyPasswordResetForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs = {'class': 'user-input-form'}
def send_mail(self, subject_template_name, email_template_name,
context, from_email, to_email, html_email_template_name=None):
print(from_email)
print(to_email)
"""
Send 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()
views.py
class MyPasswordResetView(PasswordResetView):
form_class = MyPasswordResetForm
def form_valid(self, form):
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email', '').lower()
try:
user = get_user_model().objects.get(username=username, email=email)
except(get_user_model().DoesNotExist):
user = None
if user is None:
return redirect('password_reset_done')
return super().form_valid(form)
【问题讨论】: