2011-07-28 63 views
2

我正在開發C#中的Outlook 2010自定義插件。這是我第一次使用C#(我通常是一個java傢伙)。從C#中的MailItem獲取命名的MAPI屬性#

在我想訪問的郵件上有一個名爲(自定義)的MAPI屬性,並且在這樣做時遇到了問題。我的理解是,在Outlook 2007中引入了PropertyAccessor對象,可以輕鬆訪問指定的MAPI屬性。我跟着從下列文件中的說明:

http://msdn.microsoft.com/en-us/library/ff868915.aspx

我可以看到一個名爲MAPI屬性我想在使用Outlook間諜的消息訪問。從Outlook間諜,我可以得到關於該酒店的以下信息:

GUID: {00020329-0000-0000-C000-000000000046} 
Tag num: 0x80BE0102 
ID:  PR.AFU.MESSAGE.RETRIEVE.INFO 
Type: PT_BINARY 

所以,我想下面的代碼(對象郵件的MailItem的有效實例):

mail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00020329-0000-0000-C000-000000000046}/80BE0102"); 

這將產生以下異常:

The property "http://schemas.microsoft.com/mapi/id/{00020329-0000-0000-C000-000000000046}/80BE0102" is unknown or cannot be found 

所以我想知道如何實際得到這個屬性?我是不正確地形成命名空間引用?或者我需要在這個例子中概述的使用方法:

http://www.outlookcode.com/codedetail.aspx?id=1112

我的理解是,這是唯一的預2007年版本的Outlook必要的。任何幫助深表感謝!

回答

3

OutlookSpy將爲您提供IMessage窗口中DASL編輯框中的DASL屬性名稱。

+0

謝謝。我意識到在弄清楚正確的格式並再次查看Outlook Spy後。只是來這裏發佈相同的事情。 –

+1

對於那些磕磕絆絆的問題,Andrew正在使用(variant,generated)標記號來構造DASL,他應該使用來自命名屬性本身的(不變)ID。命名屬性由其名稱空間(GUID)和ID(字符串或數字)定義。 –

0

如果您嘗試

mail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x80BE0102"); 

會發生什麼?

+0

我還沒有嘗試過,因爲我的理解是該方法只適用於標記號爲<0x80000000的交換屬性。我會盡力而爲,如果成功的話會報告回來。 –

+0

使用proptag參考的方法也無效。 –

+1

使用String架構工作: mail.PropertyAccessor.GetProperty(「http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/PR.AFU.MESSAGE.RETRIEVE。信息」); –