Python的“email.message.as_string”将一些部分编码为base64;不明白为什么

时间:2014-11-23 22:54:39

标签: python email character-encoding base64 mime

我希望使用Python的email模块将MIME邮件消息部分的编码从quoted-printablebase64更改为7bit或{{1} }。所有这些似乎都有效,但最后,对于某些消息,8bit将某些部分(email.message.as_stringtext/plain都遇到)编码为text/html。我不明白为什么,以及如何理解这种行为以避免它。

脚本代码:

base64

(如果这很重要:我使用Python 3.3)

1 个答案:

答案 0 :(得分:2)

请改用as_bytes。因此,请将您的打印更改为:

print(msg.as_bytes().decode(encoding='UTF-8'))

原因在于政策文件 https://docs.python.org/3.4/library/email.policy.html#module-email.policy

cte_type值为8bit仅适用于BytesGenerator,而不适用于Generator,因为字符串不能包含二进制数据。如果Generator在指定cte_type = 8bit的策略下运行,它将表现为cte_type为7bit。

as_string使用Generator,但是as_bytes使用你需要的BytesGenerator