从邮件项目中,我可以获取对话
var conv = mailItem.GetConversation();
if( conv != null )
{
//
}
但是用户可以选择“忽略”该对话。
如何判断某个对话是否已被忽略?
发布于 2015-10-08 21:22:47
ConversationID属性将项与会话相关联。这些项和会话在其ConversationID属性中都具有相同的值。因此,如果不存在具有相同对话ID的项目,则用户选择忽略现有对话,或者该对话中没有其他项目。尝试使用任何低级属性资源管理器,如MFCMAPI,并查看当用户选择忽略对话时更改了哪些属性。此外,您还可以考虑处理Outlook项的PropertyChange
事件以跟踪属性更改。
发布于 2015-10-08 23:23:50
忽略的对话存储在一个名为“对话操作设置”的隐藏文件夹中。它与收件箱处于同一级别,但处于隐藏状态:
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 / Restrict
或RDOFolder.HiddenItems.MAPITable.ExecSQL
)。它还允许搜索二进制属性(例如PR_CONVERSATION_INDEX,这是Outlook用来查找对话的属性)。
https://stackoverflow.com/questions/33015682
复制相似问题