首页 > 解决方案 > Django OTP 正文消息的正确路径是什么?

问题描述

我正在做一个 Django 项目,我想向用户发送一封自定义 OTP 电子邮件。我已经尝试了所有我能想到的让 OTP 电子邮件不仅显示 OTP 代码而且还显示 HTML,但它只显示“文本”的路径

我已阅读文档,但找不到太多帮助。

设置.py:

text = 'Templates/email.txt'
html = 'Templates/email.html'
#OTP settings
OTP_EMAIL_SENDER=""
OTP_EMAIL_SUBJECT="Verification Code"
OTP_EMAIL_TOKEN_TEMPLATE=text
OTP_EMAIL_BODY_TEMPLATE=text
OTP_EMAIL_BODY_TEMPLATE_PATH=html
OTP_EMAIL_TOKEN_VALIDITY=300

电子邮件.html:

<tr>
    <td bgcolor="#fdfbf0" style="padding:25px">
        <p style="margin: 0;">
            <!--the safe parameter allows us to generate html. always make sure you are passing valid html markup to the email body-->
            {{email_body|safe}}
        </p>
    </td>
</tr>

电子邮件.txt:

{{email_body}}

标签: pythonhtmldjangodebuggingsettings

解决方案


我遇到了同样的问题,我需要使用我的自定义电子邮件模板。负责发送电子邮件的代码在django_otp.plugins.otp_email.models.py文件中。您可以在EmailDevice Model 类中看到generate_challenge() 。我通过在send_mail()中添加html_message参数来解决它,如下所示:

django_otp.plugins.otp_email.models.py ...

send_mail(settings.OTP_EMAIL_SUBJECT,
      strip_tags(body),
      settings.OTP_EMAIL_SENDER,
      [self.email or self.user.email],
      html_message=body)

      ...

我的用例不同,所以我分叉了原始的django-otp包,然后将它安装到我的 docker 环境中。

您也可以通过编写自己的设备来做到这一点。这是扩展 Django-OTP文档的链接。


推荐阅读