django 内置 password_reset 从 send_email 更改连接
django built-in password_reset change connection from send_email
在我的应用程序中,我使用了内置的授权视图。我还使用 django-anymail 的邮戳连接来发送一些用户电子邮件通知。
Example:
email_backend = get_connection('anymail.backends.postmark.EmailBackend')
mail = EmailMessage(
subject=subject,
body=message,
to=[settings.DEFAULT_FROM_EMAIL],
connection=email_backend
)
我想在 PasswordResetView 中更改发送电子邮件所用的连接。有什么方法可以像我给 html_email_template_name='...'
或 success_url='...'
一样在 PasswordResetView.as_view() 中给关键字参数吗?还是我必须重写 PasswordResetView?
您不必更改 PasswordResetView
,但您必须创建一个自定义 PasswordResetForm
,然后您可以将其作为关键字参数传递给 PasswordResetView.as_view()
。
如果您查看 PasswordResetView
的源代码,您会发现它实际上并没有发送电子邮件本身。电子邮件发送是作为 PasswordResetForm.save()
的一部分完成的,它调用 PasswordResetForm.send_mail()
您可以继承 PasswordResetForm
并覆盖 .send_mail()
以使用您的自定义电子邮件后端:
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()
在我的应用程序中,我使用了内置的授权视图。我还使用 django-anymail 的邮戳连接来发送一些用户电子邮件通知。
Example:
email_backend = get_connection('anymail.backends.postmark.EmailBackend')
mail = EmailMessage(
subject=subject,
body=message,
to=[settings.DEFAULT_FROM_EMAIL],
connection=email_backend
)
我想在 PasswordResetView 中更改发送电子邮件所用的连接。有什么方法可以像我给 html_email_template_name='...'
或 success_url='...'
一样在 PasswordResetView.as_view() 中给关键字参数吗?还是我必须重写 PasswordResetView?
您不必更改 PasswordResetView
,但您必须创建一个自定义 PasswordResetForm
,然后您可以将其作为关键字参数传递给 PasswordResetView.as_view()
。
如果您查看 PasswordResetView
的源代码,您会发现它实际上并没有发送电子邮件本身。电子邮件发送是作为 PasswordResetForm.save()
的一部分完成的,它调用 PasswordResetForm.send_mail()
您可以继承 PasswordResetForm
并覆盖 .send_mail()
以使用您的自定义电子邮件后端:
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()