如何在Python中编码MIME多部分的二进制数据?

2 投票
1 回答
1981 浏览
提问于 2025-04-17 20:58

我该如何在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 个回答

2

你可以像这样强制使用你想要的 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 )

撰写回答