【问题标题】:Django email in password reset flow: won't accept special characters密码重置流程中的 Django 电子邮件:不接受特殊字符
【发布时间】:2012-11-08 18:46:11
【问题描述】:

我正在使用 Django 重置密码流程,它会向用户发送一封电子邮件,其中包含输入新密码的链接。此电子邮件的模板是 password_reset_email.html。我已将此模板复制到我自己的项目中并对其进行了自定义。但是,我无法使用特殊字符,例如 ø。通常,我使用像

这样的实体
ø or ø 

但它们不起作用-它们只是直接显示为书面形式。我没有设置 settings.DEFAULT_CHARSET 所以它应该是 utf-8。在我的 .py 文件中,我写了

# coding=UTF-8

函数 PasswordResetForm 执行以下操作:

email_template_name='registration/password_reset_email.html'
...
t = loader.get_template(email_template_name)
...

c = {'email': user.email,
      ...        
       }
send_mail("subject line",
            t.render(Context(c)), from_email, [user.email])

我尝试将模板更改为 .txt 而不是 .py,并使用了转义。

编辑:我得到的错误是:'utf8' codec can't decode byte

编辑。我意识到问题在于它根本没有渲染。这不仅仅是一个特殊的字符问题。所以,我将把它作为一个新问题来问。

【问题讨论】:

  • 对 Python 不太熟悉,但如果你想用æøå 发送电子邮件,你必须正确编码你的邮件标题。如果您尝试简单地显示模板,æøå 是否正确显示?
  • 如果我直接在 Chrome 中打开模板,那么 ø 会正确显示。似乎我可以在发送电子邮件时包含标题信息。但是编码应该是什么,然后我如何在电子邮件模板中写入字符?我不必使用 html。
  • send_mail 是标准的 python/django 函数吗?
  • 您的 数据库 是否可能没有使用 unicode 字符集?
  • 我的数据库很好。这是我直接写入模板的文本。 send_mail 是标准的: from django.core.mail import send_mail

标签: django email character-encoding


【解决方案1】:

您的问题可能与混合字符串和 unicode 序列有关。要强制表单文件中的所有字符串使用 unicode,请尝试在顶部添加以下导入:

from __future__ import unicode_literals

【讨论】:

    【解决方案2】:

    问题在于渲染,而不仅仅是特殊字符。我从来没有让 send_mail() 工作,但我正在使用 EmailMultiAlternatives.send()

    在这里回答:

    Python/Django: Email template is not rendered. Shows html tags and doesn't convert entities

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-15
      • 2013-12-18
      • 2017-06-15
      • 2017-01-25
      • 2021-10-24
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      相关资源
      最近更新 更多