使用RDO修改ConversationTopic后新版Outlook无法对话分组求助
新版Outlook对话分组逻辑差异及代码适配问题
我使用VBA结合Redemption(RDO)修改Outlook邮件的ConversationTopic字段,旧版Outlook中邮件能正常按对话分组,但新版Outlook里分组失效。请问新版Outlook的对话组织方式是否与旧版不同?
相关代码:
Set olRotorkInbox = Outlook.Application.GetNamespace("MAPI").Accounts.Session.Folders("email@domain.com").Folders("Inbox") Set olServiceDesk = olRotorkInbox.Folders("Personal").Folders("Service Desk").Folders("Incidents") Set oRDOSess = CreateObject("Redemption.RDOSession") oRDOSess.MAPIOBJECT = Outlook.Application.GetNamespace("MAPI").MAPIOBJECT For Each olServiceDeskItem In olServiceDesk.Items ConversationTopic = olServiceDeskItem.ConversationTopic For Each t In Split(olServiceDeskItem.ConversationTopic, " "): If InStr(1, t, Key) Then ConversationTopic = Keyword & " " & t: Exit For Next Set oRDOItem = oRDOSess.GetMessageFromID(olServiceDeskItem.EntryID, olServiceDeskItem.Parent.StoreID) oRDOItem.ConversationTopic = ConversationTopic oRDOItem.Fields("http://schemas.microsoft.com/mapi/proptag/0x00710102") = Null oRDOItem.Save Next
解答:
新版Outlook(尤其是采用新UI的版本)的对话分组逻辑确实和旧版存在差异,仅修改ConversationTopic已经不足以触发正确分组,还需要同步处理以下核心MAPI属性:
ConversationIndex(对应属性标记0x00710102):你代码中已将其设为Null,但新版Outlook对该属性的依赖更严格ConversationID(对应属性标记0x30130102):这是新版Outlook对话分组的核心标识,未重置该属性会导致分组逻辑失效
调整后的代码需额外重置ConversationID:
Set olRotorkInbox = Outlook.Application.GetNamespace("MAPI").Accounts.Session.Folders("email@domain.com").Folders("Inbox") Set olServiceDesk = olRotorkInbox.Folders("Personal").Folders("Service Desk").Folders("Incidents") Set oRDOSess = CreateObject("Redemption.RDOSession") oRDOSess.MAPIOBJECT = Outlook.Application.GetNamespace("MAPI").MAPIOBJECT For Each olServiceDeskItem In olServiceDesk.Items ConversationTopic = olServiceDeskItem.ConversationTopic For Each t In Split(olServiceDeskItem.ConversationTopic, " "): If InStr(1, t, Key) Then ConversationTopic = Keyword & " " & t: Exit For Next Set oRDOItem = oRDOSess.GetMessageFromID(olServiceDeskItem.EntryID, olServiceDeskItem.Parent.StoreID) oRDOItem.ConversationTopic = ConversationTopic ' 同时重置ConversationIndex和ConversationID oRDOItem.Fields("http://schemas.microsoft.com/mapi/proptag/0x00710102") = Null oRDOItem.Fields("http://schemas.microsoft.com/mapi/proptag/0x30130102") = Null oRDOItem.Save Next
额外注意事项:
- 新版Outlook会缓存对话分组数据,修改完成后建议重启Outlook使设置生效
- 若使用Exchange邮箱,服务器端会同步对话属性,修改后可手动触发一次邮箱同步
内容的提问来源于stack exchange,提问作者KevD
相关产品推荐
相关产品推荐

