我正在将带有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_header
和str.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'