首页 > 解决方案 > 使用 Python 发送电子邮件后,通过电子邮件发送的 ZIP 文件损坏(尽管内容相同)

问题描述

示例文件: https ://drive.google.com/file/d/14lkiAllI6To6WXlub8VEe5NNBzZssFFz/view?usp=sharing

示例代码:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase

SMTP = "example.com:587"
TO = "example@example.com"
USERNAME = "example@example.com"
PASSWORD = "hunter2"
zip_filename = "testfile.zip"

msg = MIMEMultipart("mixed")
msg["Subject"] = "Subject"
msg["From"] = USERNAME
msg["To"] = TO
msg.attach(MIMEText("Test messsage", "html"))

attachment = MIMEBase("application", "zip")
with open(zip_filename, 'rb') as created_zipfile:
    attachment.set_payload(created_zipfile.read())
    attachment.add_header('Content-Disposition', 'attachment;filename="%s"' % zip_filename)
    msg.attach(attachment)

server = smtplib.SMTP(SMTP)
server.ehlo()
server.starttls()
server.login(USERNAME, PASSWORD)
server.sendmail(USERNAME, TO, msg.as_string())
server.quit()

原文件是有效的,可以用7Zip打开。通过电子邮件收到的文件是相同的(当我在 Notepad++ 中打开两者并点击“比较”时,它说它们匹配),但 Windows 不会打开它。当我使用 7Zip 的“测试存档”功能时,它说它不是存档。

我很惊讶 Notepad++ 说它们是相同的,但显然有一些(元?)差异。我使用的是 Windows,但 Windows 资源管理器在属性方面没有显示任何明显差异。我发现一些 CSV 文件很好,但还没有找出导致差异的原因。我正在使用 Python 2.7.15(但意味着很快更新到 Python 3...)

标签: pythonzipemail-attachments

解决方案


我需要补充:

encoders.encode_base64(attachment)

(即使在将其附加到味精之后也可以这样做)。我在如何在 python 中将 zip 文件作为附件发送?. 无论如何,谢谢你为我躲避!


推荐阅读