dj-rest-auth重置密码邮件发送原始HTML标签问题求助
dj-rest-auth 重置密码邮件HTML源码不渲染问题解决方法
问题原因
Django 内置的密码重置表单默认仅发送纯文本邮件,你仅配置了纯文本模板参数email_template_name,未指定HTML富文本模板参数,同时自定义上下文的传递格式存在错误,导致邮件直接展示HTML标签源码。
解决步骤
- 修正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' } }
- 确认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' }
- 可选:新增纯文本兼容模板
如果需要兼容不支持HTML的邮件客户端,可以新建password_reset_email.txt编写纯文本版本的邮件内容,示例:
welcome to {{domain}} site {{site_name}}
验证
修改完成后重新触发密码重置邮件,即可正常渲染HTML富文本样式。
内容的提问来源于stack exchange,提问作者Niloofar
相关产品推荐
相关产品推荐

