MAPI文件夹关联的内容从Outlook无法始终可用?

时间:2014-09-20 11:58:14

标签: c# outlook mapi spy

使用c#vsto addin我正在尝试访问收件箱文件夹的关联内容,我认为该文件代表了活动视图。 (目标是弄乱pr_view_state属性中的blob)。问题是,如果我首先从UI访问“视图设置”,则该项目才可访问。顺便说一句,即使使用Outlook Spy

,我也会观察到相同的行为
Outlook.MAPIFolder inbox = Globals.ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Outlook.StorageItem storageItem = inbox.GetStorage("IPM.Microsoft.FolderDesign.NamedView",  Outlook.OlStorageIdentifierType.olIdentifyByMessageClass);
Outlook.PropertyAccessor pa = storageItem.PropertyAccessor;
const string PR_NORMALIZED_SUBJECT = "http://schemas.microsoft.com/mapi/proptag/0x0E1D001F";
const string PR_VIEW_STATE = "http://schemas.microsoft.com/mapi/proptag/0x68350102";
string normViewName = pa.GetProperty(PR_NORMALIZED_SUBJECT).ToString();

正如我所说,如果我在Outlook GUI中使用视图设置,那么上面的代码可以工作(也可以在Outlook Spy中显示项目),如果没有,则pr_normalized_subject返回一个空字符串并访问pr_view_state属性会引发异常。我做错了什么?

1 个答案:

答案 0 :(得分:0)

不保证文件夹视图存在。如果它不存在,GetStorage将使用指定的消息类创建新的关联消息,因此主题和视图状态属性将为空。

你确定它存在吗?访问视图状态时出现的错误是什么?当你遇到这个问题时,你在OutlookSpy中看到了什么?

如果使用Redemption是一个选项,您可以使用RDOFolder.HiddentItems.Find("MessageClass = 'IPM.Microsoft.FolderDesign.NamedView' ")之类的内容直接访问相关消息。如果消息不存在,您将返回null。