对于多行标题,Python email.header.decode_header失败

Jos*_*ino 6 python email

我正在构建一个系统,它使用Python imaplibemail模块从gmail帐户读取电子邮件并获取主题.有时,从Hotmail帐户收到的电子邮件在其标题中有换行符,例如:

In [4]: message['From']
Out[4]: '=?utf-8?B?aXNhYmVsIG1hcsOtYSB0b2Npbm8gZ2FyY8OtYQ==?=\r\n\t<isatocino22@hotmail.com>'
Run Code Online (Sandbox Code Playgroud)

如果我尝试解码该标头,它什么都不做:

In [5]: email.header.decode_header(message['From'])
Out[5]: [('=?utf-8?B?aXNhYmVsIG1hcsOtYSB0b2Npbm8gZ2FyY8OtYQ==?=\r\n\t<isatocino22@hotmail.com>', None)]
Run Code Online (Sandbox Code Playgroud)

但是,如果我用空格替换换行符和制表符,它的工作原理如下:

In [6]: email.header.decode_header(message['From'].replace('\r\n\t', ' '))
Out[6]: [('isabel mar\xc3\xada tocino garc\xc3\xada', 'utf-8'), ('<isatocino22@hotmail.com>', None)]
Run Code Online (Sandbox Code Playgroud)

这是一个错误decode_header吗?如果没有,我想知道我应该知道的其他特殊情况.

Rob*_*obᵩ 5

这是一个bug decode_header,python2.7中存在哪个bug并在python3.3中修复.

>>> sys.version_info
sys.version_info(major=3, minor=3, micro=2, releaselevel='final', serial=0)
>>> email.header.decode_header('=?utf-8?B?aXNhYmVsIG1hcsOtYSB0b2Npbm8gZ2FyY8OtYQ==?=\r\n\t<isatocino22@hotmail.com>')
[(b'isabel mar\xc3\xada tocino garc\xc3\xada', 'utf-8'), (b'<isatocino22@hotmail.com>', None)]
Run Code Online (Sandbox Code Playgroud)

VS

>>> sys.version_info
sys.version_info(major=2, minor=7, micro=5, releaselevel='final', serial=0)
>>> email.header.decode_header('=?utf-8?B?aXNhYmVsIG1hcsOtYSB0b2Npbm8gZ2FyY8OtYQ==?=\r\n\t<isatocino22@hotmail.com>')
[('=?utf-8?B?aXNhYmVsIG1hcsOtYSB0b2Npbm8gZ2FyY8OtYQ==?=\r\n\t<isatocino22@hotmail.com>', None)]
Run Code Online (Sandbox Code Playgroud)