EWS:从签名电子邮件中检索的不仅仅是附件

EWS: Retrieving more than just attachments from signed emails

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

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

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

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

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

理论上,邮件的每个单独部分都可以单独签名,但这不是大多数邮件客户端的工作方式(我不知道有任何邮件客户端除了对整个邮件进行签名之外还能做任何事情)。

如果您想确保处理任何情况,只需确保处理消息中的所有 MultipartSigned 部分 and/or ApplicationPkcs7Mime 部分,然后您就一定会处理所有情况(换句话说,不要假设只有其中一种情况)。