加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用c#打开加密的电子邮件

发布时间:2020-12-15 22:10:16 所属栏目:百科 来源:网络整理
导读:我正在Visual Studio 2012中为Outlook 2010构建一个相对简单的加载项.计算机是Win 7 Enterprise 32和64.加载项的目的是直接在用户的收件箱中解密电子邮件,以便它们可以可以在.pst存档中轻松搜索,或者以未加密的.msg文件的形式保存到网络文件夹中.电子邮件使
我正在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,以便电子邮件可以正常打开.然后,如果我关闭电子邮件并点击功能区上的新按钮,它会直接在我的收件箱中重新保存未加密的电子邮件,从而完全符合我的要求.但是,如果我一次选择多个电子邮件,或者不首先手动打开邮件,则邮件COMException上的mailItem.PropertyAccessor.Setproperty()上的代码错误未被用户代码处理:您的数字ID名称无法通过以下方式找到:底层安全系统.这告诉我在尝试打开电子邮件之前需要一种方法来提示用户输入他们的PIN.

解决方法

我不认为你可以单独使用Outlook对象模型. OOM非常努力地将签名或加密的邮件表示为常规IPM.Note项目.它甚至可以从MailItem.MAPIOBJECT属性中公开伪造的IMessage MAPI对象.

当您设置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对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读