如何判断Outlook.MailItem / Outlook.Conversation是否被忽略?

时间:2015-10-08 12:22:12

标签: c# outlook-addin

从邮件中我可以得到对话

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

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

如何判断某个对话是否被忽略?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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用来查找对话的内容)。