Edit subject - and change conversationTopic - using VBA and redemption

AndrewWeb

Member
Outlook version
Outlook 2013 32 bit
Email Account
Exchange Server
Hi all:

My organization has started prepending "[EXTERNAL EMAIL]" to subject lines. Some of the people I correspond with are frustrated by this, especially when replies end up with multiple copies of that string. My goal is to remove that text (at least for certain people).

Using (very helpful) Slipstick resources, (e.g., VBA for incoming emails, removing text from subject lines), I got my VBA working to remove the text in question from the subject. Hooray!

However, I quickly learned that the subject is not the same as conversationTopic, which is what I and others see displayed in the "Subject" column of my outlook folders. Thus, the problem of losing precious space in the subject field was not quite solved. Using more Slipstick and Stackexchange resources (subject + conversation topic, modify conversation topic), I got into Redemption. I don't fully understand Redemption, but I got some code working - mostly (the code, which resides in ThisOutlookSession, follows). And, thus, to my question:

In essence, when I watch emails come in, what I see is the following:
  1. the subject is successfully changed (i.e., when I double click on an email, the subject is simply "Some text"
  2. the conversationTopic is changed (i.e., the subject I see in the folder view changes from "[EXTERNAL EMAIL] Some text" to "Some text")
  3. the conversationTopic reverts to its original value after a second or two (i.e., the subject I see in the folder view goes back to "[EXTERNAL EMAIL] Some text")
This would appear to be related to the notification I get in a message that indicates I have inadvertently made a copy of a message ("This is the most recent version, but you made changes to another copy"). So, does anybody know how I can change the subject *and* conversationTopic *without* creating a copy of the message?

Thanks *very* much in advance,
Andrew

System info: Office 365, Version 1901; Windows 10

Screen capture showing a opened email overlaid on the inbox, with different subject vs. conversationTopic, and the notification that I made a copy:
Untitled.png



Code:

Code:
Option Explicit
Private objNS As Outlook.NameSpace
Private WithEvents objNewMailItems As Outlook.items


Private Sub Application_Startup()
    Dim objMyInbox As Outlook.MAPIFolder
    Set objNS = Application.GetNamespace("MAPI")
    Set objMyInbox = objNS.GetDefaultFolder(olFolderInbox)
    Set objNewMailItems = objMyInbox.items
    
    Set objMyInbox = Nothing
End Sub

Private Sub objNewMailItems_ItemAdd(ByVal Item As Object)
    ' for testing (this MsgBox does indeed pop up)
    MsgBox "Message subject: " & Item.Subject & vbCrLf & "Message sender: " & Item.SenderName & " (" & Item.SenderEmailAddress & ")"
    Debug.Print "conv topic = " & Item.ConversationTopic & ", subject = " & Item.Subject

    ' get a new string for the subject - and hopefully the conversationTopic
    Dim arrStrings As Variant, i As Long
    Dim strNewConversationTopic As String
    arrStrings = Array("[EXTERNAL EMAIL]  ", "RE:", "Re:", "Fw:", "FW:", "etc.")
    For i = 0 To UBound(arrStrings)
        Item.Subject = Trim(Replace(Item.Subject, arr(i), "", , , vbTextCompare))
    Next
    strNewConversationTopic = Item.Subject
    'changing the subject does not change the conversationTopic
    Debug.Print "NEW target conversation topic = " & strNewConversationTopic
        
    'prepare for Redemption
    Dim oRDOSess, oNS, objRDOitem As Object
    Set oRDOSess = CreateObject("Redemption.RDOSession")
    Set oNS = Nothing
    Set oNS = Outlook.GetNamespace("MAPI")
    oNS.Logon
    oRDOSess.MAPIOBJECT = oNS.MAPIOBJECT

    'change conversation topic and save item
    Set objRDOitem = oRDOSess.GetMessageFromID(Item.EntryID, Item.Parent.StoreID)
    objRDOitem.ConversationTopic = strNewConversationTopic
    objRDOitem.Fields("http://schemas.microsoft.com/mapi/proptag/0x00710102") = Null
    objRDOitem.Save
    Set objRDOitem = Nothing
    Item.Save
    Set Item = Nothing

End Sub
Untitled.png


Untitled.png
 
Last edited by a moderator:

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
especially when replies end up with multiple copies of that string.
On this, the process that adds the tag should check to see if the tag is present, if yes, then don't add it again.

Have you tried saving after you change the subject? Then change the conversation... or only save once:
objRDOitem.Save
Set objRDOitem = Nothing
Item.Save
 

AndrewWeb

Member
Outlook version
Outlook 2013 32 bit
Email Account
Exchange Server
On this, the process that adds the tag should check to see if the tag is present, if yes, then don't add it again.
Right you are... the addition of multiple strings is something that shouldn't happen multiple times. Unfortunately, this appears to be something they're not watching for.

More importantly, thank you. I am up and running now, with an Item.Save after changing the subject, and then objRDOitem.Save after changing the conversationTopic. (I also added a check to see if the prepended text is present in the conversationTopic before changing it.)

Thanks again!
 

Top