gpt4 book ai didi

c# - 用c#打开加密邮件

转载 作者:行者123 更新时间:2023-11-30 12:44:43 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2012 为 Outlook 2010 构建一个相对简单的加载项。机器是 Win 7 Enterprise 32 和 64。加载项的目的是直接在用户的收件箱中解密电子邮件,因此它们可以在 .pst 存档中轻松搜索或作为未加密的 .msg 文件保存到网络文件夹中。电子邮件使用 x.509 PKI 加密,私钥存储在智能卡上,每次打开加密电子邮件时都会提示用户输入 PIN。这是我目前所拥有的:

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,这样就可以正常打开电子邮件。然后,如果我关闭电子邮件并点击功能区上的新按钮,它会通过将未加密的电子邮件直接重新保存在我的收件箱中来完成我想要的操作。但是,如果我一次选择多个电子邮件,或者没有先手动打开邮件,我在 mailItem.PropertyAccessor.Setproperty() 上的代码错误和消息 COMException 未被用户处理代码:基础安全系统无法找到您的数字 ID 名称。 这告诉我,我需要一种方法来提示用户在尝试打开电子邮件之前输入他们的 PIN。

最佳答案

我不认为单独使用 Outlook 对象模型可以做很多事情。 OOM 非常努力地将签名或加密的消息表示为常规 IPM.Note 项目。它甚至从 MailItem.MAPIOBJECT 属性中公开一个伪造的 IMessage MAPI 对象。

当您设置 PR_SECURITY_FLAGS 属性时,Outlook 知道要解密邮件。无法指定解密将如何完成或提供任何参数。该属性只不过是一种加密/解密 Outlook 消息的技巧;它仅在使用 MailItem.PropertyAccessor.SetProperty 设置属性时有效。

最终您需要的是加密/签名消息存储的 P7M 附件中的数据。你可以在 OutlookSpy 中看到这个(我是它的作者):如果您单击 OutlookSpy 工具栏上的 IMessage 按钮(它使用 MailItem.MAPIOBJECT),您将看到常规的解密消息。但是,如果您在 IMessage 窗口中单击 IMAPISecureMesage 或从 IMAPIFolder | 打开消息GetContentsTable 选项卡,您将看到原始加密消息及其 P7M 附件。

要提取该附件,您需要扩展 MAPI(仅限 C++ 或 Delphi)或类似 Redemption 的包装器(我也是它的作者 - 使用 RDOSession.GetMessageFromID)。赎回还公开了 RDOEncryptedMessage可用于解密的对象。

关于c# - 用c#打开加密邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com