2014-03-05 38 views
1

如何在Python中构建MIME多部分消息?我已经尝试了Python的email包,但它看起来坏了 - 它不能正确地执行二进制部分(将它们的Content-Transfer-Encoding设置为base64并将数据保留为二进制文件)。请注意,对于我的应用程序,实际数据是二进制编码非常重要,而不是base64。我需要最小化尺寸。在Python中使用二进制数据编码MIME多部分?

这是我试过的代码。

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()) 

回答

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) 
+0

这是行不通的。它只是添加了第二个头文件,并将破碎的'base64'文件保留在原位。 –

+0

@ edA-qamort-ora-y它在Python 2.7.3上适用于我。你注意到了'encoders.encode_noop'吗? –

+0

对不起,我没有看到那部分。是的,我可以得到二进制编码。我担心,因为“二进制”不是一个标准的编码器,也许它不能解码这些消息。 –

相关问题