Python 2.7在内存中创建一个ZipFile并将其附加到电子邮件中

问题描述 投票:0回答:1

我正在尝试修改现有的python脚本,以将内存中CSV转换为zip存档(也包含在内存中),并将其作为电子邮件附件发送。我已经成功地附加了一个内存中的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)

从此This user's most upvoted answer,我可以通过对zip文件执行常规的open操作来解决我收到的“ read()至少包含2个参数”错误,但由于该文件是缓冲流,因此无法工作。

我不确定如何将zipfile对象加载到set_payload中,但我认为应该也可以。预先感谢您的帮助。

python python-2.7 email-attachments zipfile in-memory
1个回答
0
投票

read对象的ZipFile方法用于读取zip文件中命名文件的内容。

[通过buffer实例的writestr方法写入缓冲区后,应使用ZipFile的内容:

csv_file.set_payload(buffer.getvalue())
© www.soinside.com 2019 - 2024. All rights reserved.