private void buttonDecrypt_Click(object sender,RibbonControlEventArgs e) { currentExplorer = Globals.ThisAddIn.Application.ActiveExplorer(); if (currentExplorer.Selection.Count > 0) { for (int i = 0; i < currentExplorer.Selection.Count; i++) { Object selObject = currentExplorer.Selection[i+1]; if (selObject is Microsoft.Office.Interop.Outlook.MailItem) { Microsoft.Office.Interop.Outlook.MailItem mailItem = (selObject as Microsoft.Office.Interop.Outlook.MailItem); mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003",0); mailItem.Save(); } } } }
如果我在Outlook中手动打开加密电子邮件,系统会提示我输入PIN,以便电子邮件可以正常打开.然后,如果我关闭电子邮件并点击功能区上的新按钮,它会直接在我的收件箱中重新保存未加密的电子邮件,从而完全符合我的要求.但是,如果我一次选择多个电子邮件,或者不首先手动打开邮件,则邮件COMException上的mailItem.PropertyAccessor.Setproperty()上的代码错误未被用户代码处理:您的数字ID名称无法通过以下方式找到:底层安全系统.这告诉我在尝试打开电子邮件之前需要一种方法来提示用户输入他们的PIN.
解决方法
当您设置PR_Security_FLAGS属性时,Outlook知道解密该邮件.无法指定解密的完成方式或提供任何参数.该属性只不过是加密/解密Outlook消息的黑客攻击;它仅在使用MailItem.PropertyAccessor设置属性时才有效.
最终您需要的是加密/签名消息存储的P7M附件中的数据.您可以在OutlookSpy中看到这一点:如果单击OutlookSpy工具栏上的IMessage按钮(它使用MailItem.MAPIOBJECT),您将看到常规解密消息.但是,如果单击IMessage窗口中的IMAPISecureMesage或从IMAPIFolder打开消息,请执行以下操作: GetContentsTable选项卡,您将看到原始加密邮件及其P7M附件.
要提取该附件,您需要扩展MAPI(C或Delphi)或类似Redemption的包装器(使用RDOSession.GetMessageFromID). Redemption还公开了可用于解密的RDOEncryptedMesage对象.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。