You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dj-rest-auth重置密码邮件发送原始HTML标签问题求助

dj-rest-auth 重置密码邮件HTML源码不渲染问题解决方法

问题原因

Django 内置的密码重置表单默认仅发送纯文本邮件,你仅配置了纯文本模板参数email_template_name,未指定HTML富文本模板参数,同时自定义上下文的传递格式存在错误,导致邮件直接展示HTML标签源码。

解决步骤

  1. 修正Serializer代码,新增HTML模板参数
    你可以选择统一使用CustomPasswordResetSerializer,新增html_email_template_name参数,同时修正上下文传递逻辑:
from django.conf import settings
from dj_rest_auth.serializers import PasswordResetSerializer

class CustomPasswordResetSerializer(PasswordResetSerializer):
    def save(self):
        request = self.context.get('request')
        opts = {
            'use_https': request.is_secure(),
            'from_email': getattr(settings, 'DEFAULT_FROM_EMAIL'),
            'request': request,
            # 可选:纯文本兼容模板,不使用可删除
            'email_template_name': 'password_reset_email.txt',
            # 核心配置:指定HTML富文本模板
            'html_email_template_name': 'password_reset_email.html',
            # 传递自定义模板变量
            'extra_email_context': {
                'domain': settings.WEBSITE_DOMAIN,
                'site_name': 'mizban'
            }
        }
        opts.update(self.get_email_options())
        self.reset_form.save(**opts)

如果你要沿用MyPasswordResetSerializer的写法,调整get_email_options返回值即可:

from django.conf import settings
from dj_rest_auth.serializers import PasswordResetSerializer

class MyPasswordResetSerializer(PasswordResetSerializer):
    def get_email_options(self) :
        return {
            # 可选:纯文本兼容模板,不使用可删除
            'email_template_name': 'password_reset_email.txt',
            'html_email_template_name': 'password_reset_email.html',
            'extra_email_context': {
                'domain': settings.WEBSITE_DOMAIN,
                'site_name': 'mizban'
            }
        }
  1. 确认settings配置正确
    确保settings.py中PASSWORD_RESET_SERIALIZER指向你修改后的Serializer,不需要同时配置两个自定义Serializer:
REST_AUTH_SERIALIZERS = {
    'JWT_TOKEN_CLAIMS_SERIALIZER': 'account.token.TokenObtainPairSerializer',
    'USER_DETAILS_SERIALIZER': 'account_profile.api.userupdate.UserSerializer',
    # 选择你实际使用的自定义Serializer即可
    'PASSWORD_RESET_SERIALIZER': 'account_profile.api.customemail.CustomPasswordResetSerializer'
}
  1. 可选:新增纯文本兼容模板
    如果需要兼容不支持HTML的邮件客户端,可以新建password_reset_email.txt编写纯文本版本的邮件内容,示例:
welcome to {{domain}}
site {{site_name}}

验证

修改完成后重新触发密码重置邮件,即可正常渲染HTML富文本样式。


内容的提问来源于stack exchange,提问作者Niloofar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:06:04