[英]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-stream
和MIME-Version: 1.0
是部分)需要这些换行符。
另外,请记住,您通常不应该以这种方式编辑内部变量。 然而,我觉得 Python 的优点之一是类实际上没有私有成员,因此您可以在类中修改任何您想要的内容。 我们可以为所欲为,尤其是在特殊情况下。
快乐编码!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.