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

我正在将带有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') 

最佳答案 有关国际化电子邮件标头格式的完整说明,请参阅
RFC 2047.基本格式是“=?” charset“?”编码“?”编码文本“?=”.所以在你的情况下,你有一个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'
点赞