【发布时间】:2015-09-09 11:07:24
【问题描述】:
我尝试创建一个包含来自特定目录(和子目录)的所有文件的 zip 存档并通过邮件发送:
#Create archive containing all files from directory "reports/"
zipf = zipfile.ZipFile('reports.zip', 'w')
for root, dirs, files in os.walk('reports/'):
for file in files:
zipf.write(os.path.join(root, file))
#Create email
msg = MIMEMultipart()
msg["From"] = emailfrom
msg["To"] = emailto
msg["Subject"] = "Monatliche Reports - Verrechnung an Kunden"
#Attach report.zip to email
fp = open(fileToSend, "rb")
attachment = MIMEBase('application', 'zip')
attachment.set_payload(fp.read())
fp.close()
encoders.encode_base64(attachment)
attachment.add_header("Content-Disposition", "attachment",
filename=fileToSend)
msg.attach(attachment)
#Send email via localhost smtp-server
server = smtplib.SMTP("localhost")
server.sendmail(emailfrom, emailto, msg.as_string())
server.quit()
脚本似乎有效。我收到了包含所有文件的附加 zip 存档的邮件。脚本执行时有两种可能的情况:
案例 1:在执行脚本之前已经有一个 zip 存档,名为 report.zip(上次运行的旧文件)
案例2:执行脚本前没有zip压缩包。
如果情况 1 一切正常。旧的替换为新生成的,然后将通过电子邮件发送。
在案例 2 中,report.zip 生成并通过电子邮件发送,但它是无效的。如果我尝试使用 7zip(或 Windows 板载工具)在 Windows 上打开它,它只会说“存档无效”。我发现只有通过电子邮件发送的 report.zip 被破坏了。如果我通过电子邮件手动发送案例 2 中生成的 report.zip,我可以将其解压缩并使用这些文件。
我是一个 python 新手,老实说,要达到我现在的位置已经够难了,但是解决这个问题让我很头疼。谁能解释一下我做错了什么?
【问题讨论】:
标签: python email python-3.x mime-types mime