2012-01-10 10 views
5

Quiero ayudar a Outlook 2010 a enhebrar mis correos electrónicos. Según tengo entendido, basa la vista de conversación fuera de la propiedad conversationTopic del MailItem. Escribí el siguiente método y creé una regla para que activara temas de correo electrónico como "Pedido # 345 - Respuesta del proveedor" y "Pedido # 345 - Respuesta del cliente" y ponerlos en el mismo hilo. Desafortunadamente, el conversationTopic es una propiedad de solo lectura.¿Cómo puedo modificar conversationTopic para que los correos electrónicos con diferentes temas se pongan en el mismo hilo?

¿Alguien sabe una forma de evitar esto o tal vez una mejor manera de llevar a cabo la misma tarea? ¡Gracias!

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

¿Alguna vez este trabajo? ¡Estoy intentando hacer algo similar con un éxito mínimo! – swiss196

Respuesta

4

Estaba buscando más o menos la misma cosa, esto no parece ser posible con los objetos expuestos normalmente como usted señala, pero redención macro VBA + Outlook permite tema de conversación para ser ajustado fácilmente. Además, el tema del mensaje original no se modifica, pero los mensajes aún se muestran en un buen grupo de conversación ordenado.

Algo como esto, lanzado en VBA macro y luego ejecutar este script como una acción de regla cuando se reciben mensajes con cualquier criterio a determinar:

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

Al probar esto en las últimas versiones de Outlook, agregaron más propiedades de conversación: visualmente tienen el mismo título de conversación, pero ya no se agrupan correctamente. ¿Alguna idea sobre cómo actualizar esta respuesta (o una nueva respuesta) para versiones posteriores de Outlook? – Krease

+1

En realidad, lo descubrí por mí mismo; también debe darles la misma propiedad ConversationIndex, específicamente los primeros bytes son los mismos para todos los mensajes en la misma conversación, y los bytes posteriores son para identificar el orden dentro de la conversación. Puede encontrar más detalles depurando a través del VBA y mirando/modificando esta propiedad. – Krease

0

Usando Outlook Redemption, pude fusionar elementos de correo seleccionados en una sola conversación con el siguiente código. Lo modelé con la respuesta de @fredless anterior para mis necesidades.

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 

'la siguiente línea a partir de este 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 
Cuestiones relacionadas