MAPI文件夹关联的内容不能始终从Outlook中获得?

问题描述:

使用c#vsto插件我试图访问收件箱文件夹的相关内容,我相信它代表活动视图。 (目标是弄乱pr_view_state属性中的blob)。问题在于,如果我先从UI访问视图设置,该项目才可以访问。顺便说一下我观察到相同的行为甚至使用Outlook间谍MAPI文件夹关联的内容不能始终从Outlook中获得?

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界面视图设置玩那么上面的代码工作(另见项目显示在Outlook间谍),如果没有的话pr_normalized_subject返回一个空字符串,并访问pr_view_state属性将引发异常。我究竟做错了什么?

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

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

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

+0

该视图肯定存在,Outlook客户端正在使用它,因为您可以看到条件格式正在发生,如果我单击功能区上的更改视图按钮,我看到我的自定义视图是活动视图。然而,它不会显示在Outlook Spy(或我的代码),直到我点击查看设置并对其进行一些更改。此外,一旦我访问它并对blob进行更改并将其保存回来,视图也会相应地更新,并且它会持续存在。所以如果我重新启动Outlook,我可以看到修改后的视图生效。但是,直到我做了一些图形用户界面操作之后,我又失去了访问该房产的权利 – 2014-09-21 08:13:33

+0

如果您在OutlookSpy中看不到该视图,则它在物理上不存在。请记住,除非实际修改Outlook,否则Outlook不会使用视图定义创建隐藏的消息。你究竟如何修改blob?你使用MAPI或Outlook对象模型来做到这一点吗? – 2014-09-22 05:19:19