You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VSTO Outlook C#插件中获取加密MailItem的EntryID

VSTO Outlook C#插件读取加密邮件EntryID/MAPIOBJECT的问题

场景与现有代码

需要遍历全为加密MailItem的文件夹,获取其EntryID或MAPIOBJECT用于扩展MAPI,现有遍历代码如下:

foreach (object olObject in folder.Items)
{
    if (olObject is Outlook.MailItem olM)
    {
        // olM.EntryID 访问失败
    }
}

核心问题

当邮件为PKI加密且私钥存储在插入电脑的个人智能卡中时,用户必须至少打开过一封加密邮件,Outlook对象模型(OOM)才能读取MailItem的属性,但遍历文件夹时无法提前确认该条件是否满足。

疑问与尝试

  • 发现通过Outlook.Selection转换为MailItem可以正常获取EntryID,想知道对folder.Items是否有类似可行的处理方法;
  • 未查看过加密邮件时,访问mailItem.MAPIOBJECT会抛出异常,且Outlook抛出该异常耗时过长,希望找到快速判断Outlook能否读取加密邮件的方法;
  • 曾考虑等待加密邮件的检查器窗口打开,但存在用户中途移除智能卡后仍无法读取的问题。

更新:经确认,无法直接实现判断Outlook能否读取加密邮件的功能。当前采用的策略是监听加密MailItem的检查器窗口打开事件——此时用户已输入智能卡PIN,Outlook已获取解密私钥,此后所有MailItem的EntryID、MAPIOBJECT等属性均可正常读取,直到Outlook关闭或智能卡被拔出。目前正在使用Net.Pkcs11Interop检测读卡器、智能卡及证书事件,同时计划研究UWP的Windows.Devices.SmartCards命名空间。

内容的提问来源于stack exchange,提问作者darbid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:25:18