3

我目前正在尝试开发一个 Outlook 插件。为了实现非功能性要求,我需要访问存储在 .nk2 文件中的 Outlook 缓存联系人。我参考了这篇文章,但不知道该怎么做。

编辑(答案):

Microsoft.Office.Interop.Outlook.Application oApp = Globals.ThisAddIn.Application;
        Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = oApp.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);

        StorageItem storage = inboxFolder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByMessageClass);

        //IPM.Configuration.Autocomplete

        PropertyAccessor propertyAcc = storage.PropertyAccessor;

        byte[] got = propertyAcc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102");

目前我一直在访问字节数组,当我访问数组时,值与这篇文章中提到的不同

4

3 回答 3

2
Microsoft.Office.Interop.Outlook.Application oApp = Globals.ThisAddIn.Application;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = oApp.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);

StorageItem storage = inboxFolder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByMessageClass);

PropertyAccessor propertyAcc = storage.PropertyAccessor;

byte[] got = propertyAcc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102");

使用此处的描述访问byte[]. 我完成了它工作正常的代码。您只需遍历每个字节并在访问时检查数据类型。

于 2012-08-02T12:53:02.630 回答
0

编辑:

您可以使用对象而不是字节数组吗(如果这不起作用,请将鼠标悬停GetProperty在调试期间,然后查看它期望的返回类型)。例如:

Dim objPropAcc As Outlook.PropertyAccessor    
Dim result As Object
objPropAcc = BindingStorageItem.PropertyAccessor
result = objPropAcc.GetProperty("http://schemas.microsoft.com/mapi/id/{00062040-0000-0000-C000-000000000046}/8A48001E").ToString();

参考:如何从 Outlook 获取共享点日历​​ URL?

老的:

这是 Microsoft 知识库文章如何将 .nk2 文件导入 Outlook 2010

Outlook 2007 和 2010 与昵称缓存交互,也称为“自动完成流”。自动完成流是 Outlook 保留自动完成列表的位置,该列表是在用户撰写电子邮件时显示在“收件人”、“抄送”和“密件抄送”编辑框中的名称列表。本主题在此处描述 Outlook 2007 和 Outlook 2010 如何与自动完成流交互,还讨论文件的二进制格式以及与自动完成流交互的推荐方式。

还可以在这里查看一些示例:http: //ol2010mapisamples.codeplex.com/,我认为这个 codeplex 项目是由MAPI 专家 Stephen Griffin运行的。

于 2012-08-02T04:38:04.117 回答
0

除了解析原始流之外,您还可以使用Redemption及其RDONicknames对象 - 它可以访问文件 (NK2) 和基于存储的昵称。

于 2015-01-07T17:40:00.993 回答