python - 如何在 python 中签署和发送 Mimultipart 消息?
问题描述
通常,在 python 中发送带有附件的消息是这样执行的。
import smtplib
from os.path import basename
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
def send_mail(send_from, send_to, subject, text, files=None,
server="127.0.0.1"):
assert isinstance(send_to, list)
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = COMMASPACE.join(send_to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach(MIMEText(msg, 'html'))
for f in files or []:
with open(f, "rb") as fil:
part = MIMEApplication(
fil.read(),
Name=basename(f)
)
# After the file is closed
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
msg.attach(part)
smtp = smtplib.SMTP(server)
smtp.sendmail(send_from, send_to, msg.as_string()) # The problem is here
smtp.close()
但是,我无法执行此操作,因为要使用 ꜱᴍɪᴍᴇ 签名的部分只是正文和附件,而不是所有元数据。
在这种情况下,我需要拆分消息和元数据。但是,我仍然需要使用email.mime.multipart
和 email.mime.application`` 来构建附件元数据(同时排除其他元数据)
那么如何在仍然使用 ʜᴛᴍʟ 格式和附件的同时创建带有附件的 ʜᴛᴍʟ 电子邮件?
解决方案
推荐阅读
- css - 如何在 div 上启用没有滚动条的输入样式滚动?
- python - 堆叠未知维度的numpy数组
- android - App重启后如何获取保存状态?
- if-statement - JS在两种颜色之间切换onlick w / if else
- apache-kafka - Kafka中如何根据另一条记录的处理结果来处理一条记录?
- python - sqlite3.OperationalError 关于不完整的输入 - 建议赞赏
- cygwin - --export-dynamic 和 --export-all-symbols 之间有什么区别?
- slurm - slurm 可以将 3 台单独的计算机作为一个“节点”运行吗?
- c# - 为什么将空值转换为 datetime2 会在 SQL 中引发转换错误?
- c - 无法从子级访问父级的共享变量