2012-01-10 18 views
5

我想幫助Outlook 2010處理我的電子郵件。我的理解是,它基於MailItemconversationTopic屬性的對話視圖。我編寫了以下方法並創建了一個規則,以便在電子郵件主題上觸發,例如「訂單#345 - 供應商回覆」和「訂單#345 - 客戶回覆」並將它們放在同一個線程中。不幸的是,conversationTopic是一個只讀屬性。如何修改conversationTopic,以便將具有不同主題的電子郵件放在同一個線程中?

有沒有人知道解決這個問題的方法,或者是完成相同任務的更好方法?謝謝!

Sub ModifyConversationTopic(Item As Outlook.MailItem) 
    Dim regex As RegExp 
    Dim newMailItem As Outlook.MailItem 
    newMailItem = Item.Copy 
    Set regex = New RegExp 
    regex.IgnoreCase = False 
    regex.Global = True 
    regex.Pattern = "(Order# [0-9]+) .*" 
    If regex.Test(newMailItem.Subject) Then 
     Dim matches As MatchCollection 
     Set matches = regex.Execute(newMailItem.Subject) 
     Set topic = matches.Item(0) 
     MsgBox ("OH YEAH" + topic) 
     newMailItem.ConversationTopic = topic 
     newMailItem.Save 
    End If 
End Sub 
+2

你有沒有得到這個工作?我正在嘗試以最小的成功來做類似的事情! – swiss196 2014-11-06 02:15:45

回答

4

一直在尋找幾乎完全一樣的東西,這似乎並不爲你指出來有可能與通常公開的對象,但VBA宏+展望贖回允許交談的話題很容易地調整了。獎金,原始郵件主題不變,但郵件仍顯示在一個很好的整潔的談話組。

這樣的事情,扔進VBA宏,然後與您確定任何標準收到短信時運行該腳本規則操作:

Sub MsgProcess(msg As MailItem) 
    Dim oNS As Object 
    Dim oRDOSess As Object 
    Dim oRDOItem As Object 
    Dim sEntryID As String 
    Dim sStoreID As String 

    Dim NewConversationTopic As String 


    Set oRDOSess = CreateObject("Redemption.RDOSession") 
    Set oNS = Nothing 
    Set oNS = Outlook.GetNamespace("MAPI") 
    oNS.Logon 
    oRDOSess.MAPIOBJECT = oNS.MAPIOBJECT 

    sEntryID = msg.EntryID 
    sStoreID = msg.Parent.StoreID 
    Set oRDOItem = oRDOSess.GetMessageFromID(sEntryID, sStoreID) 

    'Apply what modifications to topic you want here - dumb example string manipulation shown 
    NewConversationTopic = Replace(oRDOItem.ConversationTopic, "BLACK", "WHITE") 

    oRDOItem.ConversationTopic = NewConversationTopic 
    oRDOItem.Save 
End Sub 
+0

在最新版本的Outlook中試用此功能後,他們添加了更多對話屬性 - 在視覺上它們具有相同的對話標題,但它們不再正確分組。有關如何爲以後的Outlook版本更新此答案(或新答案)的任何想法? – Krease 2016-01-15 00:39:57

+1

實際上,我自己想出了它 - 你也必須給它們相同的ConversationIndex屬性,特別是同一個對話中所有消息的前幾個字節是相同的,後面的字節是用於識別對話內的順序。您可以通過調試VBA並查看/修改此屬性來查找更多詳細信息。 – Krease 2016-01-15 19:50:40

0

使用Outlook Redemption,我能夠使用以下代碼將選定的郵件項目合併到單個對話中。我根據我的需要將其模型化爲@fredless的答案。

Public Sub MergeConversations() 

Dim NewConversationTopic As String 
Dim msg As MailItem 
Dim msgSel As Selection 
Dim oRDOSess, oNS, objRDOitem As Object 

Set msgSel = Nothing 
Set msgSel = Application.ActiveExplorer.Selection 

If msgSel.Count <= 1 Then 
    MsgBox ("Multiple Mail Items have not been selected!") 
    Set msgSel = Nothing 
    Exit Sub 
End If 

Set msg = msgSel.Item(1) 

NewConversationTopic = msg.ConversationTopic 

Set msg = Nothing 

Set oRDOSess = CreateObject("Redemption.RDOSession") 
Set oNS = Nothing 
Set oNS = Outlook.GetNamespace("MAPI") 
oNS.Logon 
oRDOSess.MAPIOBJECT = oNS.MAPIOBJECT 

For Each msg In msgSel 
    Set objRDOitem = oRDOSess.GetMessageFromID(msg.EntryID, msg.Parent.StoreID) 
    objRDOitem.ConversationTopic = NewConversationTopic 

「下面一行是從這個answer

objRDOitem.Fields("http://schemas.microsoft.com/mapi/proptag/0x00710102") = Null 
    objRDOitem.Save 
    Set objRDOitem = Nothing 
Next msg 

Set msgSel = Nothing 
Set msg = Nothing 

End Sub 
相關問題