2012-08-02 34 views
3

我目前正在尝试开发Outlook插件。为了实现非功能需求,我需要访问存储在.nk2文件中的Outlook缓存联系人。我提到这个post,但无法弄清楚如何去做。Outlook 2010自动完成流(缓存的联系人)

编辑(答):

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"); 

目前我被困在访问字节数组,当我accesing数组的值比它是如何在这个post

+0

欢迎来到[so]。你能告诉我们你遇到麻烦的文章的哪些部分?您有没有看过[新的Outlook 2010 MAPI参考](http://blogs.msdn.com/b/officedevdocs/archive/2011/08/26/outlook-2010-mapi-reference-has-been-updated的.aspx)?你在寻找一个代码示例。 – 2012-08-02 04:28:09

+0

毫米没有看到新的Outlook 2010 MAPI参考。我在邮件帐户的交付商店的收件箱的关联内容表中访问了隐藏消息的MAPI属性PidTagRoamingBinary。 – Proceso 2012-08-02 05:14:52

回答

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"); 

使用说明here来访问byte[]领域。我完成了正确工作的代码。您只需循环访问每个字节并检查数据类型。

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(); 

编号:how to get a sharepoint calendar url from outlook?

老:

下面是一个Microsoft知识库文章How to import .nk2 files into Outlook 2010

Outlook 2007和2010年的昵称缓存交互,也被称为 “自动完成流”。自动完成流是Outlook 仍然存在自动完成列表,这是当用户撰写 电子邮件时, 在收件人,抄送人和密件抄送编辑框中显示的名称列表。 This topic here描述了 Outlook 2007和Outlook 2010如何与自动完成 流进行交互,并讨论了文件的二进制格式以及与自动填充流进行交互的推荐方式。

也有看一些样品的看过来的:http://ol2010mapisamples.codeplex.com/,我觉得 CodePlex项目是由MAPI expert Stephen Griffin运行。

+0

我正在阅读你链接到的pdf,而且我看不到'byte []'作为'GetProperty'方法的返回类型。你能看到我的编辑吗,我在msdn上找到一篇文章,里面有一些非常好的代码片段,它们可以帮助你跨越这个障碍。 – 2012-08-02 05:27:56

+0

mmm我正在将GetProperty方法返回的对象强制转换为byte []。我可以在调试时看到返回的字节[]和值。但是当我逐字节地访问它时,这些值是不同的,因为它们在帖子中被描述http://stephengriffin.members.winisp.net/nk2/NK2WithBinaryExample.pdf – Proceso 2012-08-02 06:54:12

+0

我从我开始的方式完成了代码。它工作正常,我可以访问所有缓存的联系人。只需要更多的访问来访问每个字节并通过循环来检查它,谢谢大家的帮助:) – Proceso 2012-08-02 12:55:32

0

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