【问题标题】:Encode MIME multipart with binary data in Python?在 Python 中用二进制数据编码 MIME 多部分?
【发布时间】: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() )

【问题讨论】:

    标签: python python-2.7 mime


    【解决方案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 编码不需要任何解码即可获得原始八位位组。
    猜你喜欢
    • 1970-01-01
    • 2018-03-20
    • 2010-10-26
    • 2011-08-31
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多