【问题标题】:How to detect whether Outlook digitally signs an email by default?如何检测 Outlook 是否默认对电子邮件进行数字签名?
【发布时间】:2011-03-22 02:56:42
【问题描述】:

背景: 我正在开发一个 Outlook 插件,它将附件添加到传出的电子邮件中。所有版本的 Outlook 都需要支持。

使用数字签名对 MailItem 进行签名后,向该 mailItem 添加附件通常会失败,除非您保存该邮件项目。这会从 mailitem 中删除签名。对我来说,这在某种程度上是预期的行为。这里没有什么奇怪的。

问题是当用户打开数字签名(无论是通过 UI 还是作为 Outlook 默认行为)然后再次将其关闭时。 MailItem 不再签名,但它仍然表现得好像是 - 我们无法向此电子邮件添加附件。

我找到了一个新闻组帖子,可以解释原因;通过 Outlook API 检索到的对象似乎不是实际对象。

http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.messaging/2006-02/msg00000.html

目前,我已经放弃尝试很好地解决这个问题;将 MailItem 保存到临时文件似乎可以解决此问题,但出于性能原因,我们只想在 MailItem 从已签名转换为未签名时保存。另一种可接受的替代方法是检测是否默认启用了数字签名。虽然有一个与数字签名的默认设置相关的注册表项,但这只是一个建议,并不能准确反映电子邮件是否会默认签名。

有什么想法吗?

【问题讨论】:

    标签: outlook mime digital-signature mapi digital-certificate


    【解决方案1】:

    您可以使用 redemption api library 从 C# 调用该方法。

    您还尝试过从扩展的 mapi dll 创建 PInvoke 签名吗?

    【讨论】:

    • 从赎回中调用实际上并没有起作用,这令人惊讶。 PInvoke 是个好主意;但是我们已经有了一个 c++ 包装器,所以不妨在那里调用它:)
    【解决方案2】:

    原来你可以在 C++ 中使用 EMAPI 来调用 IMessagePtr->SaveChanges(),这似乎工作得很好。不幸的是,您无法在 C# 中访问它。

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 2013-10-06
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      相关资源
      最近更新 更多