在 Python 中用二进制数据编码 MIME 多部分?
Posted
技术标签:
【中文标题】在 Python 中用二进制数据编码 MIME 多部分?【英文标题】:Encode MIME multipart with binary data in Python? 【发布时间】:2014-04-08 00:02:45 【问题描述】:如何在 Python 中构造 MIME 多部分消息?我已经尝试过 Python 的 email
包,但它似乎坏了——它没有正确执行二进制部分(将它们的 Content-Transfer-Encoding
设置为 base64 并将数据保留为二进制)。请注意,对于我的应用程序,实际数据是二进制编码的,而不是 base64 编码,这一点非常重要。我需要最小化尺寸。
这是我试过的代码。
from email import message, mime, generator, encoders
from email.mime import multipart, text, image
from cStringIO import StringIO
import os
m = multipart.MIMEMultipart( "related" )
part = text.MIMEText( "text", "plain" )
part.set_payload( "hello" )
part.add_header( 'Content-Disposition', 'asset', name='abc' )
m.attach( part )
part = image.MIMEImage( "image", "x-other" )
part.set_payload( os.urandom(200) )
m.attach( part )
fp = StringIO()
g = generator.Generator( fp, mangle_from_ = False, maxheaderlen = 1000 )
g.flatten(m)
print( fp.getvalue() )
【问题讨论】:
【参考方案1】:你可以像这样强制Content-Transfer-Encoding
:
part = image.MIMEImage( "image", "x-other", encoders.encode_noop )
part.set_payload( os.urandom(200) )
part.add_header( 'Content-Transfer-Encoding', 'binary' )
m.attach( part )
【讨论】:
这不起作用。它只是添加了第二个标题并将损坏的base64
留在原处。
@edA-qamort-ora-y 它在 Python 2.7.3 上对我有用。你注意到encoders.encode_noop
了吗?
对不起,我没看到那部分。是的,这样做我可以获得二进制编码。不过我很担心,因为“二进制”不是标准编码器,它可能无法解码这些消息。
好的,这行得通。 Python 并不真正支持这种编码,它只是默默地不解码它。
@edA-qamort-ora-y “不解码”是什么意思?根据定义,binary
编码不需要任何解码即可获得原始八位位组。以上是关于在 Python 中用二进制数据编码 MIME 多部分?的主要内容,如果未能解决你的问题,请参考以下文章