1

在 python 中以编程方式检测和更正Content-Type charset电子邮件标头的正确方法是什么?

我有 1000 封电子邮件被提取到.eml(基本上是纯文本)文件中,有些是编码shift_jis的,但是电子邮件标题中的字符集没有提到这一点,所以它们在任何电子邮件程序中都不能正确显示。charset手动添加到Content-Type标题中可以更正此问题。

曾是:

Content-Type: text/plain; format=flowed

需要是:

Content-Type: text/plain; charset="shift_jis"; format=flowed

在 python 中保留电子邮件正文和标题的其他部分的正确方法是什么?

另外,有没有办法检测哪种编码,并且只纠正那些编码?我不能只是盲目地转换所有内容,因为有些是iso_2022_jp,并且那些已经正确显示。

4

1 回答 1

1

使用get_charset您可以获得消息的预先存在的字符集。这是一个示例:

from email import message_from_file
msg = message_from_file(open('path.eml'))
msg.get_charsets()
[None, 'gb2312', None]

使用这种方法,您可以遍历所有消息,并使用 set_charset() 将其设置为没有正确消息的消息。

于 2018-03-21T03:25:50.573 回答