【问题标题】:Django utf-8 email comes with damaged symbolsDjango utf-8 电子邮件带有损坏的符号
【发布时间】:2014-01-01 08:42:47
【问题描述】:

我在从我的服务器发送带有俄语文本的电子邮件时遇到问题。 我正在发送这样的电子邮件:

from django.core.mail import EmailMultiAlternatives
message = EmailMultiAlternatives(
    'some subject',
    '',
    'from@example.com',
    ['to@example.com']
)
message.attach_alternative(unicode_text_with_html, "text/html")
message.send()

当这封电子邮件涉及邮件服务(即 gmail.com)时,有时会出现几个损坏的符号 - Ð � 而不是字母。其他字母(即使是相同的字母)也不会损坏。当我指定 cp1251 编码(即message.encoding = 'cp1251')时,电子邮件不会被损坏。但是有些电子邮件服务不接受 cp1251 编码,并且在用户尝试阅读邮件时会出错。

当我使用带有 utf-8 编码的基于文件的电子邮件后端时,邮件正文中的符号也不会损坏。并且字符集设置为 utf-8。

我想知道 utf-8 编码的消息怎么会这样被破坏。我能做些什么来摆脱这些符号吗?

P.S.:我使用 Postfix 作为邮件服务器来发送邮件

更新:在我的测试服务器上情况完全一样。我已经删除了 Postfix 并用 Qmail 替换了它。一切正常。我把它换回来,符号又回来了。所以我最近的猜测是它的 Postfix 问题。我会尝试调整配置。

【问题讨论】:

  • 你试过用Django's ugettext_(unicode_text_with_html)
  • 我想知道这有什么帮助。刚试了一下,什么也没做。

标签: python django email utf-8 postfix-mta


【解决方案1】:

我会考虑只添加以下几行:

#-*- coding: utf-8 -*-
from __future__ import unicode_literals

它帮助我摆脱了以下错误:

'ascii' codec can't encode character u'\u0119' in position 6: ordinal not in range(128)

【讨论】:

    【解决方案2】:

    您需要通过类似 php 的 htmlentities() 来运行它,以将所有无法识别的字符转换为 html 安全实体。在您的情况下, Ð 转换为:Ð

    或者,有几个基于网络的转换器,其中一些列在in this answer

    【讨论】:

    • 交易是每个符号都被识别并且没问题。当我通过 gmail 后端发送完全相同的电子邮件时,一切都很好。我怀疑问题出在后缀设置中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2020-11-21
    • 2019-10-05
    • 2011-10-04
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多