繁体   English   中英

Python MIME Base64 编码

[英]Python MIME Base64 Encoding

我需要生成一个包含 Base64 编码文件的 MIME 附件。 但是,我还需要考虑的是在没有任何新行的情况下对附件进行编码。 我的代码如下:

msg_obj = MIMEMultipart()
msg_atch = MIMEBase(mime_type, mime_subtype)
msg_atch.set_payload(file_data)
Encoders.encode_base64(msg_atch)
msg_obj.attach(msg_atch)

我试图执行以删除附加 base64 消息中的新行是这样的:

msg_obj = MIMEMultipart()
msg_atch = MIMEBase(mime_type, mime_subtype)
msg_atch.set_payload(file_data)
Encoders.encode_base64(msg_atch)
msg_atch.strip()
msg_obj.attach(msg_atch)

然而,这未能改变数据的结果。 如果有人对如何实现这一点有任何想法,那就太好了。

我注意到在第二个示例代码的倒数第二行中,您调用了msg_atch.strip()函数。 问题在于MIMEBase没有任何函数strip()

您可能想要做的事情是这样的:

msg_obj = MIMEMultipart()
msg_atch = MIMEBase(mime_type, mime_subtype)
msg_atch.set_payload(file_data)
Encoders.encode_base64(msg_atch)
msg_atch._payload = msg_atch._payload.replace('\n','')
msg_obj.attach(msg_atch)

MIMEBase._payload字符串是附件使用的实际(在本例中为 base64)内容。

此代码将采用 MIMEBase 附件的内部内容并消除额外的换行符 - 包括内部的换行符,以提供良好的 base64 文本格式以实现“人类可读性”(我的问题是为什么他们甚至打扰)。 如果您只想去掉最后的换行符,只需使用msg_atch._payload = msg_atch._payload.rstrip('\\n')

请记住,附件的标题( Content-Type: application/octet-streamMIME-Version: 1.0是部分)需要这些换行符。

另外,请记住,您通常不应该以这种方式编辑内部变量。 然而,我觉得 Python 的优点之一是类实际上没有私有成员,因此您可以在类中修改任何您想要的内容。 我们可以为所欲为,尤其是在特殊情况下。

快乐编码!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM