【发布时间】:2015-02-17 18:29:09
【问题描述】:
我正在使用 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 was unhandled by user code: Your Digital ID name cannot be found by the underlying security system. 这告诉我我需要一种方法来提示用户在之前输入他们的 PIN正在尝试打开电子邮件。
【问题讨论】:
-
不知道您的技术问题,但在我看来
can be easily searched in .pst archives与prompts the user for a PIN each time an encrypted email is opened不一致 -
@PeterM 正确。如果电子邮件消息保持加密状态,则每次打开电子邮件时都会提示用户输入 PIN。在 Outlook 搜索期间,该电子邮件也会被跳过。这就是为什么我试图添加一个按钮来重新保存解密的电子邮件。加密的目的只是为了传输过程中的安全。
-
@texasranger 好吧,我不知道你的用例,但我想这真的归结为是否需要加密来保护消息仅在传输过程中,或者也来自邪恶的同事。但是一个 C 级的家伙丢失了他的笔记本电脑,这让加密技术彻底崩溃了:D
-
@PeterM 这些机器由整个磁盘加密保护。加密的电子邮件用于防火墙外的通信。
标签: c# email outlook-addin public-key-encryption