MIME multipart/mixed原生二进制支持及Python解码合理性咨询
问题
我不确定MIME multipart/mixed是否标准支持未经过base64编码的原生二进制数据,尤其是用Python解码时遇到了问题。我的代码如下:
msg = email.message_from_binary_file(fp, policy=email.policy.HTTP) for part in msg.walk(): if part.get_content_maintype() == 'multipart': continue filename = part.get_filename() payload = part.get_content()
获取到的payload被做了文本处理(比如0x13被转为0x10),这直接损坏了数据。想问下有没有办法切换到纯二进制模式?是不是应该对数据进行base64编码?对应的MIME格式如下:
Content-Type: multipart/mixed;boundary=123456789000000000000987654321 Transfer-Encoding: chunked --123456789000000000000987654321 Content-Type: image/jpeg Content-transfer-encoding: binary Content-Disposition: attachment; filename="2024-02-08T000418.jpg" Content-Length: 23302 <binary data> --123456789000000000000987654321
2024年2月8日更新
- RFC 2045指出:“Content-Transfer-Encoding中的‘binary’表示未执行任何编码转换”
- RFC 2045指出:“在互联网邮件中,‘binary’编码在任何情况下都不合法”
- RFC 2045定义的编码机制:
mechanism := "7bit" / "8bit" / "binary" / "quoted-printable" / "base64" /
- Python的
email.message_from_bytes调用不会修改回车符(CR) - 文件对象
fp确实是以二进制模式打开的
基于以上信息,我得出以下结论:
Content-transfer-encoding: base64是标准支持的- 由于Python的email模块是邮件处理机制,严格遵循了上述RFC中“互联网邮件中禁止使用binary编码”的规定
- 假设这份已有28年历史的RFC仍然有效,或许不能说Python email模块存在bug,但我认为
email.message_from_binary_file确实无法正确处理二进制文件
请问我的逻辑是否合理?
内容的提问来源于stack exchange,提问作者Malachi
相关产品推荐
相关产品推荐

