首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django内置了来自password_reset的send_email更改连接

django内置了来自password_reset的send_email更改连接
EN

Stack Overflow用户
提问于 2018-10-29 11:55:33
回答 1查看 304关注 0票数 0

在我的应用程序中,我使用内置的auth视图。我还使用一个使用django-anymail的邮戳连接来通知一些用户电子邮件。

代码语言:javascript
复制
Example: 

email_backend = get_connection('anymail.backends.postmark.EmailBackend')
   mail = EmailMessage(
   subject=subject,
   body=message,
   to=[settings.DEFAULT_FROM_EMAIL],
   connection=email_backend
   )

我想改变我用PasswordResetView发送电子邮件的连接。有任何方法可以在PasswordResetView.as_view()中给出关键字参数,就像给html_email_template_name='...'success_url='...'那样吗?还是我必须重写PasswordResetView?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-29 12:19:14

您不必更改PasswordResetView,但您必须创建一个自定义PasswordResetForm,然后将其作为关键字参数传递给PasswordResetView.as_view()

如果你看一下PasswordResetView的源代码,你会发现它实际上并没有发送电子邮件本身。电子邮件发送是作为PasswordResetForm.save()的一部分完成的,后者调用PasswordResetForm.send_mail()

您可以子类PasswordResetForm和改写.send_mail()来使用您的自定义电子邮件后端:

代码语言:javascript
复制
from django.contrib.auth.forms import PasswordResetForm

class PostmarkPasswordResetForm(PasswordResetForm):
    def send_mail(self, subject_template_name, email_template_name,
                  context, from_email, to_email, html_email_template_name=None):
        """
        Send a django.core.mail.EmailMultiAlternatives to `to_email` using
        `anymail.backends.postmark.EmailBackend`.
        """
        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_backend = get_connection('anymail.backends.postmark.EmailBackend')

        email_message = EmailMultiAlternatives(subject, body, from_email, [to_email], connection=email_backend)
        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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53044987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档