【问题标题】:Python, sending email with special character in subjectPython,发送主题中带有特殊字符的电子邮件
【发布时间】:2012-12-12 15:40:13
【问题描述】:

我正在从 Python (Django) 发送电子邮件。电子邮件主机是“smtp.gmail.com”。当我使用 localhost 时,我可以在电子邮件主题中使用特殊字符。但是,现在我正在从服务器(webfaction)尝试我收到一个错误“UnicodeDecodeError:'ascii'编解码器无法解码字节......”在电子邮件模板中我使用十六进制代码,但它们不适用于主题(它们没有被翻译)。怎么办?

# coding=UTF-8
...

subject = "æøå"
c = {}
t_html = loader.get_template(template_html)
t_text = loader.get_template(template_txt) 
e = EmailMultiAlternatives(subject, t_text.render(Context(c)), from_email, [to_email])
e.attach_alternative(t_html.render(Context(c)), "text/html")
e.send() 

【问题讨论】:

  • 我发现这个stackoverflow.com/a/517974/230884 对我的案例很有用。值得一看。我也同意mgibsonbru 并不能解决所有问题。其他一些角色会失败。
  • @CppLearner 我的意思是,只使用coding 不使用也使用u 并不总是有效。无论如何,如果环境不支持coding 和/或指定的编码,它就无法正确读取源文件。最好使用十六进制代码或\uXXXX
  • @mgibsonbr 我的想法正好相反。也许这只是我的环境。我已经按照你的建议做了,但这种组合仍然不起作用。所以最后,我必须使用上面链接的解决方案。我对 unicode 知之甚少(真遗憾,哈哈)。因此,useful for my cases :) 加油。
  • @CppLearner 你是对的,反之亦然。请参阅我的更新答案。不用担心,unicode 是一个棘手的主题,我已经使用它多年,还有很多东西要学(例如,规范化,我不知道)。

标签: python email encoding


【解决方案1】:

如果您使用的是 Python 2,我建议您在字符串前面加上 u:

subject = u"æøå"

(我知道coding“魔术评论”应该自动处理,但根据经验我可以说它并不总是有效)

更新:为了将来参考,确保生产环境支持开发中使用的相同编码也很重要。 UTF-8 应该没问题(它在所有地方都受支持),但如果您要在 Windows (Cp1252) 下编辑源文件,然后部署到 UNIX 服务器中,Python 解释器可能无法读取它们,无论如何coding 的存在。

【讨论】:

  • 很好,成功了! (我可以在 5 分钟内接受你的回答)
猜你喜欢
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 2011-11-22
相关资源
最近更新 更多