如何检测默认情况下Outlook是否对电子邮件进行数字签名?

如何检测默认情况下Outlook是否对电子邮件进行数字签名?,outlook,mime,digital-signature,mapi,digital-certificate,Outlook,Mime,Digital Signature,Mapi,Digital Certificate,背景: 我正在开发一个Outlook插件,它为发送的电子邮件添加附件。所有版本的Outlook都需要支持 使用数字签名对邮件项目进行签名后,除非保存邮件项目,否则向该邮件项目添加附件通常会失败。这将从mailitem中删除签名。对我来说,这是意料之中的行为。没什么奇怪的 问题在于用户打开数字签名(无论是通过用户界面还是作为Outlook默认行为),然后再次将其关闭。MailItem已不再签名,但其行为仍与签名相同--我们无法为此电子邮件添加附件 我发现了一个新闻组的帖子,可以解释为什么;通过ou

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

使用数字签名对邮件项目进行签名后,除非保存邮件项目,否则向该邮件项目添加附件通常会失败。这将从mailitem中删除签名。对我来说,这是意料之中的行为。没什么奇怪的

问题在于用户打开数字签名(无论是通过用户界面还是作为Outlook默认行为),然后再次将其关闭。MailItem已不再签名,但其行为仍与签名相同--我们无法为此电子邮件添加附件

我发现了一个新闻组的帖子,可以解释为什么;通过outlook API检索的对象似乎不是实际对象

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


有任何想法吗?

< P>证明了你可以在C++中使用EMAPI来调用IsEasePPTR>SaveCechange(),这看起来很不错。不幸的是,你不能在C语言中访问这个问题。

< P>证明了你可以在C++中使用EMAPI来调用IsEasePPTR>SaveCechange(),这看起来很不错。不幸的是,您无法在C#中访问该方法。

您可以使用从C#调用该方法

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

您可以使用它从C#调用该方法


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

从redemption调用实际上不起作用,这令人惊讶。平沃克是个好主意;但是我们已经有了一个C++包装器,所以不妨在这里调用它:从赎回中调用其实并不奏效,这很令人惊讶。平沃克是个好主意;但是我们已经有了一个C++包装器,所以不妨在这里调用它: