c# - 通过 Azure 信息保护统一标签客户端读取 Outlook 电子邮件中设置的 Internet header

标签 c# vsto outlook-addin azure-information-protection

我正在使用 Azure 信息保护统一标签客户端来标记电子邮件。我们仍在我们的环境中使用 PGP,并且严格保密的电子邮件必须进行 PGP 加密。

当电子邮件发送时,我会尝试找出电子邮件是如何分类的,并在分类严格保密的情况下触发 PGP 加密。这是在 Outlook VSTO c# 插件中完成的。

为了找出分类,我阅读了由 AIP 设置的电子邮件 header 属性“msip_labels”,其中包含所有必要的信息。我正在使用以下过程来读取标题。该代码距离完美还很远。我只是想知道如何获取该值。:

private void GetHeaders()
{
    var mail = (Outlook.MailItem)Application.ActiveInspector().CurrentItem;
    var propertyAccessor = mail.PropertyAccessor;
    try
    {
        var custom = propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/msip_labels");
    }
    catch(Exception ex) 
    {
        var message = ex.Message;
    }
}

我能够读取由另一个工具设置的属性,但 AIP 属性是多行的。执行代码时,我收到错误:类型冲突。 (HRESULT 异常:0x80020005 (DISP_E_TYPEMISMATCH))

有没有办法读取多值属性?以下是 msip_labels 属性的示例(GUID 替换为 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX):

msip_labels: MSIP_Label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_Enabled=true;
 MSIP_Label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_SetDate=2019-11-14T07:16:38Z;
 MSIP_Label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_Method=Privileged;
 MSIP_Label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_Name=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX;
 MSIP_Label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_SiteId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX;
 MSIP_Label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_ActionId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX;
 MSIP_Label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_ContentBits=1
msip_label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_enabled: true
msip_label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_setdate: 2019-11-14T07:16:48Z
msip_label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_method: Privileged
msip_label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_name:
 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
msip_label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_siteid:
 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
msip_label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_actionid:
 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
msip_label_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_contentbits: 0

最佳答案

最后我弄清楚了如何创建属性架构字符串,以便它返回正确的数据类型。使用 Outlook Spy 分析项目有助于找出数据类型。用于查询 msip_labels 的具有正确架构字符串的正确代码行是:

var mSIPLabels = propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/msip_labels/0x0000001F") as string;

在属性名称之后,我必须传递类型描述符 0x0000001F

关于c# - 通过 Azure 信息保护统一标签客户端读取 Outlook 电子邮件中设置的 Internet header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851539/

相关文章:

c# - 在 C# 中优化尾调用

c# - 理解这个delphi方法并将其转换为C#

c# - 泛型的问题

outlook - 如何使用 ExplorerEvents_10_CloseEventHandler?

c# - 在 C# 中选择性粘贴 vsto Excel

ASP.NET Gridview 分页样式中的 C# Bootstrap 分页?

python - 如何获取 PyWin32 进程的 PID

c# - Outlook 功能区加载检查器。CurrentItem 为 null

c# - 我的 Outlook 加载项如何获取用户在我的自定义菜单中右键单击的附件对象?

outlook - 清理办公室加载项缓存