python-3.x - 如何使用 Python 发送 .docx 附件
问题描述
我已成功通过电子邮件发送并验证了.txt/.ppt/.pdf文件,但使用相同的代码我无法从该脚本的电子邮件中打开附件。
filename = "textfile.docx"
part = MIMEBase('application', "octet-stream")
part.set_payload(open("textfile.docx", encoding = "ISO-8859-1").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(part)
解决方案
DOCX 是一种压缩格式,因此它是一个二进制文件。因此,您的代码使用西方 ISO 纯文本编码来读取文件:open("textfile.docx", encoding = "ISO-8859-1")
这是完全错误的。您可以通过将二进制流作为编码纯文本的字节流打开来读取它。然后直接从字节码编码成base64。不使用任何文本编码。无论如何,这在许多其他情况下都是错误的。有人可能会发送 utf-8 编码的纯文本而不是西方 ISO 编码的文本,这也可能会导致您当前的脚本出现伪影。
推荐阅读
- javascript - 如何将 Angular 8 项目构建为 .war 文件
- json - Google Sheets ImportJSON 返回错误 SyntaxError: Unexpected token: < (line 165)
- vue.js - 如何在 vuejs 中为自己的键赋值
- jquery - 检索 json 并放入文本框
- sorting - 如何根据第四列选择包含每个 ID 的指数值的最小值?
- python - Python将sql数据字符串转换为列表
- maximo - 更新服务地址时调用自动脚本(具有 WO 对象启动点)?
- javascript - 如何在承诺中检索数组值?(未捕获(承诺中)TypeError:无法读取未定义的属性“tabId”)
- php - 用于汇总多个计数数据的 MySQL 语法
- sql - 如何更新 AWS Athena 表中的列