我怎么知道Outlook.邮件项目/ Outlook.对话是否被忽略

本文关键字:Outlook 是否 对话 项目 我怎么知道 | 更新日期: 2023-09-27 18:16:34

从邮件中我可以得到对话

var conv = mailItem.GetConversation();
if( conv != null )
{
   //
}

但是用户可以选择"忽略"对话。

我怎么知道某个对话是否被忽略了?

我怎么知道Outlook.邮件项目/ Outlook.对话是否被忽略

ConversationID属性将项与对话关联起来。这些项和会话在其ConversationID属性中都具有相同的值。因此,如果没有具有相同会话ID的项目,则用户选择忽略现有会话,或者该会话中没有其他项目。尝试使用任何低级属性资源管理器(如MFCMAPI),看看当用户选择忽略对话时改变了哪些属性。您还可以考虑处理Outlook项目的PropertyChange事件来跟踪属性更改。

被忽略的对话存储在名为"对话操作设置"的隐藏文件夹中。它与收件箱在同一层,但隐藏:

Outlook.MAPIFolder csFolder = Application.Session.GetDefaultFolder(olFolderInbox).Parent.Folders["Conversation Action Settings"];

项存储在关联的内容表中。您可以在OutlookSpy中看到数据(我是它的作者)-单击IMsgStore按钮,打开根容器,转到GetHierarchyTable选项卡,双击IPM_SUBTREE文件夹,再次转到GetHierarchyTable选项卡,双击"对话操作设置";文件夹,进入"关联内容"。选项卡。

访问Outlook对象模型中关联消息的唯一方法是通过MAPIFolder.GetStorage。它不会让你访问所有隐藏的项目或搜索一个特定的项目-你只能通过消息类(它将是"IPM.ConversationAction")(对于所有对话项)、主题或条目id。你当然可以按主题来,但这不是唯一的——你可以和同一个主题进行多次对话,但其中一个被忽略了,另一个没有。

如果使用Redemption(我也是它的作者)是一个选项,它将相关消息视为常规项目(可通过RDOFolder.HiddenItems访问),因此您可以搜索(RDOFolder.HiddenItems.Find / FindNext / RestrictRDOFolder.HiddenItems.MAPITable.ExecSQL)。它还允许搜索二进制属性(例如PR_CONVERSATION_INDEX,这是Outlook用来查找对话的)。