首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在m2crypto中附加SMIME文件?

如何在m2crypto中附加SMIME文件?
EN

Stack Overflow用户
提问于 2022-03-31 13:03:38
回答 1查看 119关注 0票数 1

我正在尝试用加密文本和附件实现SMIME邮件。到目前为止,我做了以下工作:

代码语言:javascript
复制
#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”变量?

如果有人能给我举个例子,如何在这段代码中放置附件,或者我必须在哪里查找,那就太好了。:)

EN

回答 1

Stack Overflow用户

发布于 2022-05-06 14:55:06

这些步骤将是:

  • 创建MIMEMultipart消息
  • 将文件附加到它上,就像“正常”一样。
  • 将整个MIMEMultipart消息以字节形式传递给SMIME并对其进行签名

我的做法是:

代码语言:javascript
复制
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)
...

等等-剩下的部分(签名和发送)在问题的代码片段中。

我还找到了一个文章,其中作者以类似的方式完成了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71692982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档