2012-08-02 66 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)和基於存儲的暱稱。