首页 > 解决方案 > EWS:不仅从签名的电子邮件中检索附件

问题描述

我正在尝试创建一个系统,该系统将拦截进入各种电子邮件地址的电子邮件并将它们分类,以及它们的所有附件。这些附件都是我们需要加载到另一个系统中的文件。目前,我们正在使用 Outlook 宏将所有附件放到一个目录中并以这种方式加载它们。不幸的是,这种方法不容易跟踪哪些电子邮件有哪些附件。如果我们想确保我们对收到的每份文件进行会计处理,我们需要一种更稳健的方法。

所以,我正在构建一个基于 EWS 的 Windows 服务。这个想法是它将订阅我想要管理的所有电子邮件地址。因此,它将了解所有新电子邮件、对它们进行分类并跟踪附件。它适用于大多数电子邮件,但安全发送的电子邮件需要由个人查看(因为这些电子邮件需要登录到某处的安全服务器才能查看消息和下载附件)。但是,对于数字签名的电子邮件,我只是下载了一个名为“smime.p7m”的附件。我在这个论坛上发现了一个帖子,告诉我如何获取附件,但是如果电子邮件正文是数字签名的呢?有没有办法我也可以提取它?

我决定采用这里描述的 MimeKit 方法(这不是公认的答案,但有几个答案涉及 MimeKit,所以我决定检查一下,它看起来很有希望)。

我目前的方法是,如果电子邮件正文没有经过数字签名,那么我可以直接从基本电子邮件将其加载到我的系统中。但是,如果它是数字签名的,那么我需要从 smime.p7m 文件中获取它,这就是我遇到麻烦的地方。不过,我使用示例提取附件没有问题。目前,我没有数字签名电子邮件正文的示例。但是,我想积极主动地在它发生之前找到解决方案,并且用户询问为什么缺少电子邮件正文。或者,知道这是否可能同样有帮助,并且电子邮件中唯一经过数字签名的部分是附件(在这种情况下,我可以完全忽略这一点)。这实际上是最好的情况!

标签: c#emailexchangewebservicessmimemimekit

解决方案


通常,当通过 S/MIME 对邮件进行签名时,会对整个邮件(包括正文和附件)进行签名。

从理论上讲,消息的每个单独组件都可以单独签名,但这不是大多数邮件客户端的工作方式(我不知道除了对整个消息进行签名之外的任何其他操作)。

如果您想确保处理任何场景,只需确保处理消息中的所有MultipartSigned部分和/或ApplicationPkcs7Mime部分,然后您将确保处理所有场景(换句话说,不要假设只有 1那些)。


推荐阅读