压缩文件列表并附加在电子邮件中 ​​- python

Posted

技术标签:

【中文标题】压缩文件列表并附加在电子邮件中 ​​- python【英文标题】:zip a list of files and attach in email - python 【发布时间】:2017-01-10 08:34:20 【问题描述】:

我有一个文件列表,其中包含需要压缩在一起以作为电子邮件附件的所有文件。

目前我使用的代码是

if zip_file == True:
    for file in file_list:
        zf = tempfile.TemporaryFile(prefix='mail', suffix='.zip')
        zip = zipfile.ZipFile(zf, 'a')
        zip.write(file)
        zip.close()
        zf.seek(0)
        part = MIMEBase('application', 'zip')
        part.set_payload(zf.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment', filename='xls_attachments' + '.zip')
        msg.attach(part)

这让我可以为所有文件创建一个 zip 文件并将它们附加到邮件中。所以如果我在file_list 中有 10 个文件,那么邮件将有 10 个压缩附件。但我想要的是将所有 10 个文件放入一个 zip 文件中。

我在这里看到过使用多个zip.write() 方法来写入每个文件的示例。但这并不好,因为我无法控制file_list 中的条目数。

【问题讨论】:

看这个答案:***.com/questions/25544475/… 【参考方案1】:

您可以使用以下方式将文件夹中的所有文件压缩到一个 zip 中:

import os
import zipfile

working_folder = 'C:\\path_to_some_folder\\'
files = os.listdir(working_folder)
files_py = files

ZipFile = zipfile.ZipFile("zip testing3.zip", "a" )

for a in files_py:
    ZipFile.write(os.path.basename(a), compress_type=zipfile.ZIP_DEFLATED)
ZipFile.close()

【讨论】:

以上是关于压缩文件列表并附加在电子邮件中 ​​- python的主要内容,如果未能解决你的问题,请参考以下文章

从列表框中选择多个项目以附加到电子邮件中

在 Golang 中附加文件并通过 SMTP 发送时没有正文部分的电子邮件

使用 Google App Scripts 在电子邮件中附加 Google Docs 文件

PHPMailer 不发送带有附加 zip 文件的邮件

创建一个使用javascript打开默认邮件应用程序并附加文件的表单

如何在 PHP 中将特定 PDF 附加到电子邮件中?