use*_*570 5 python python-2.x smime m2crypto python-2.7
通常,在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()
Run Code Online (Sandbox Code Playgroud)
但是,我无法执行此操作,因为要使用signed签名的部分仅是正文和附件,而不是所有元数据.
在这种情况下,我需要拆分消息和元数据.但是,我仍然需要使用email.mime.multipart和email.mime.application``来构建附件元数据(同时排除其他元数据)
那么如何在使用ʜᴛᴍʟ格式和附件的同时创建带附件的ʜᴛᴍʟ电子邮件?