-1

我需要生成一个包含 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)

然而,这并没有改变数据的结果。如果有人对如何允许这样做有任何想法,那就太好了。

4

1 回答 1

1

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

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

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 的优点之一是类中实际上没有私有成员,因此您可以在类中修改任何您想要的内容。我们可以为所欲为,尤其是在特殊情况下。

快乐编码!

于 2012-08-22T17:35:22.820 回答