电子邮件主题中的编码如何工作? (Django / Python)

时间:2011-03-17 17:58:57

标签: python django email encoding

我正在将带有EmailMessage对象的电子邮件发送到Gmail邮箱 电子邮件的主题看起来像这样: 你“你收到了来自Daėriusęėįęėįęįįįį的信--- reply3_433441”

当我收到一封电子邮件时,查看邮件信息,我可以看到主题行看起来像这样:

主题:=?utf-8?b?WW91IGdvdCBhIGxldHRlciBmcm9tIERhxJdyaXVzIMSZxJfEr8SZxJfEr8SZ?=  =?UTF-8 2 B 4 XK / El8SZxK / EmS0tLXJlcGx5M180MzM0NDE =?=

如何解码此主题行?

我已经用以下方法解密了电子邮件正文(tex / plain):

for part in msg.walk():
  if part.get_content_type() == 'text/plain':
    msg_encoding = part.get_content_charset()
    msg_text = part.get_payload().decode('quoted-printable')
msg_text = smart_unicode(msg_text, encoding=msg_encoding, strings_only=False, errors='strict') 

3 个答案:

答案 0 :(得分:4)

有关国际化电子邮件标头格式的完整说明,请参阅RFC 2047。基本格式为"=?" charset "?" encoding "?" encoded-text "?="。所以在你的情况下,你有一个base-64编码的UTF-8字符串。

您可以使用email.header.decode_headerstr.decode函数对其进行解码并获取正确的Unicode字符串:

>>> import email.header
>>> x = email.header.decode_header('=?utf-8?b?WW91IGdvdCBhIGxldHRlciBmcm9tIERhxJdyaXVzIMSZxJfEr8SZxJfEr8SZ?=')
>>> x
[('You got a letter from Da\xc4\x97rius \xc4\x99\xc4\x97\xc4\xaf\xc4\x99\xc4\x97\xc4\xaf\xc4\x99', 'utf-8')]
>>> x[0][0].decode(x[0][1])
u'You got a letter from Da\u0117rius \u0119\u0117\u012f\u0119\u0117\u012f\u0119'

答案 1 :(得分:3)

您应该查看Python标准库中的email.header module。特别是,在文档的最后,您可以使用decode_header()函数为您完成大部分艰苦工作。

答案 2 :(得分:0)

主题行是utf8,但你是以ASCII格式读取它,你最安全地读取它作为utf8,因为ASCII实际上只是作为utf8的子集。