繁体   English   中英

在 memory 中创建一个 ZipFile 并将其附加到 email

[英]Create a ZipFile in memory and attach it to an email

I'm trying to modify an existing python script to convert an in-memory CSV into an (also in memory) zip archive and send it as an attachment to an email. 我已经成功地在 memory CSV 文件中附加了一个(通过 MIMEText 对象),但是由于 ZIP 文件(通过 MIMEBase 文件对象的有效负载设置字节)遇到问题。

这是我到目前为止的代码:

csv_buffer = cStringIO.StringIO()
buffer = cStringIO.StringIO()

zf = zipfile.ZipFile(buffer,
               mode='w',
               compression=zipfile.ZIP_DEFLATED,
               )

zf.writestr(csvfile + ".csv", csv_buffer.getvalue())


csv_file = MIMEBase('application', 'zip')
csv_file.set_payload(zf.read())
encoders.encode_base64(csv_file)
csv_file.add_header('Content-Disposition', 'attachment',
         filename=csvfile + ".zip")

msg.attach(csv_file)

从这个这个用户最赞成的答案中,我可以通过对 zip 文件执行正常的open()操作来修复read() takes at least 2 arguments错误,但由于该文件是缓冲的 ZF7B44CFAFD5C652223D5Z498 不工作。

我不确定如何将zipfile object 加载到set_payload中,但我认为这也应该有效。

ZipFile object 的read方法旨在读取 zip 文件中命名文件的内容。

在使用ZipFile实例的writestr方法写入缓冲区后,您应该使用buffer的内容:

csv_file.set_payload(buffer.getvalue())

暂无
暂无

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

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