我正在尝试用加密文本和附件实现SMIME邮件。到目前为止,我做了以下工作:
#Example for parameter values:
#subject = "abc"
#content = "some text"
#attachment = some file
#destination = "abc@abc.com"
#sender = "xyz@xyz.com"
def smime_mail(subject, content, attachment, destination, sender):
# Preperation
msg_bytes = content.encode()
msg_bio = BIO.MemoryBuffer(msg_bytes)
sign_key = "/opt/sign_key.pem"
sign_cert = "/opt/sign_cert.pem"
ricipient_cert = "/opt/ricipient.pem"
smime = SMIME.SMIME()
# Load sign key/cert and sign
smime.load_key(sign_key, sign_cert)
p7 = smime.sign(msg_bio, flags=SMIME.PKCS7_Text)
msg_bio = BIO.MemoryBuffer(msg_bytes)
sk = X509.X509_Stack()
sk.push(X509.load_cert(ricipient_cert))
smime.set_x509_stack(sk)
smime.set_cipher(SMIME.Cipher('aes_256_cbc'))
tmp_bio = BIO.MemoryBuffer()
smime.write(tmp_bio, p7)
# Encrypt
p7 = smime.encrypt(tmp_bio)
# Format Mail
out = BIO.MemoryBuffer()
out.write(f'From: {sender}\r\n')
out.write(f'To: {destination}\r\n')
out.write(f'Subject: {subject}\r\n')
out.write(out, p7)
out.close()
# Mail send
smtp = smtplib.SMTP('localhost')
smtp.sendmail(sender, destination, out.read())
smtp.quit()代码正常工作,我收到一封加密/签名邮件到我的outlook。
现在我的问题是,我找不到一个例子,如何添加一个附件到我的SMIME邮件。我是否必须将"MIMEMultipart()“对象放入缓冲区而不是"content”变量?
如果有人能给我举个例子,如何在这段代码中放置附件,或者我必须在哪里查找,那就太好了。:)
发布于 2022-05-06 14:55:06
这些步骤将是:
MIMEMultipart消息MIMEMultipart消息以字节形式传递给SMIME并对其进行签名我的做法是:
files = ["foo/a.txt", "bar/b.txt"]
msg = MIMEMultipart()
msg.attach(MIMEText("Hello world!", "plain"))
for filename in files:
with open(filename, "rb") as f:
msg.attach(MIMEApplication(f.read(), NAME=os.path.basename(f)))
msg_bytes = msg.as_bytes()
msg_bio = BIO.MemoryBuffer(msg_bytes)
...等等-剩下的部分(签名和发送)在问题的代码片段中。
我还找到了一个文章,其中作者以类似的方式完成了它。
https://stackoverflow.com/questions/71692982
复制相似问题