In-line reply style in Outlook

I've been forced to use MS Outlook as a mail client for some years now. For my work, I tend to communicate with Open Source software developers and mailinglists quite often. Needless to say, the Outlook reply style and HTML formatting of messages is not really compatible with that.

To overcome this, I've been using a VBA macro to create a special ReplyToAll button. Today, I've perfected this macro and I'm publishing it for others to use.

The macro has the following features:

  1. Reply in Plain Text automatically
  2. Set Reply Style to use '>' indenting, a.k.a. in-line reply style
  3. Get rid of automatic signature that Outlook may insert into the reply
  4. Remove the Outlook Reply header and replace with "On <DATE>, <NAME> wrote:"

Note that I'm not at all experienced in writing VBA macros, so the coding is a bit messy:
'
' Reply To All in Plain Text, with Linux-style quoting
'
' This allows you to use Outlook to reply to a mailinglist
'
' Copyright 2009 Matthijs van de Water
'
Sub ReplyAllPlain()

Dim app As New Outlook.Application
Dim exp As Outlook.Explorer
Set exp = app.ActiveExplorer
Dim strID As String
Dim olNS As Outlook.NameSpace
Dim item As Outlook.MailItem

'Get MailItem based on EntryID, otherwise we'll get security warnings
strID = exp.Selection.item(1).EntryID
Set olNS = Application.GetNamespace("MAPI")
Set item = olNS.GetItemFromID(strID)
    
' Store name of the sender and date of sent message
Dim name As String
name = item.SentOnBehalfOfName
datestr = Format(item.SentOn, "DDD, MMM dd, yyyy at HH:mm:ss")

' ReplyToAll to this message in Plain formatting with > style
item.BodyFormat = olFormatPlain
item.Actions("Reply to All").ReplyStyle = olReplyTickOriginalText
Dim rply As Outlook.MailItem
Set rply = item.ReplyAll

' Rebuild original body:
'  - Remove Outlook-style reply header
'  - Get rid of auto-inserted signature (optionally move to end of message)
orgBody = rply.Body
pos = InStr(orgBody, ">") - 1
sig = Left(orgBody, pos)
myBody = Mid(orgBody, pos + 1)
b = 0
lines = Split(myBody, vbNewLine)
For Each myLine In lines
    If b > 4 Then
        newBody = newBody & myLine & vbNewLine
    End If
    b = b + 1
Next

' Put new body together
rply.Body = "On " & datestr & ", " & name & " wrote:" _
           & vbNewLine & newBody & vbNewLine '& sig

rply.Display

item.Close olDiscard
End Sub

Comments

  1. Tait Clarridge says:

    Hi Matthijs,

    Nice work on the VB macro, however there is an easier solution if you are using Office 2007 (haven't tested on 2003).

    Go to Tools / Options

    In the Preferences tab select E-mail Options... at the top.

    In the On replies and forwards section at the bottom for each of the two drop downs select Prefix each line of the original message

    Then at the second input box from the bottom, put in the reply style you want to use.

    Great tutorial by the way, I am on running Outlook on Crossover Office and macros don't like it haha. :-)

    Best,
    Tait

  2. Matthijs says:

    Hey Tait,

    What you're referring to will set the reply style for all outgoing messages.

    This macro will set it only for the message you're using it on.

    Thanks for your feedback anyway :-)

  3. Cyril says:

    This does not work when you reply to HTML/RTF messages.

  4. Jeenu says:

    Hi,

    Thanks for your macro; it's very useful.

    However, I'd like to suggest a modification to the part where the actual header is skipped. The current method is to skip the first 5 lines. But mail header some times contain CC, Importance fields etc., which will make the header more than 5 lines. This will in turn result in extra (and unwanted) lines in the body created by the macro. So the alternative method to screen the header could be to filter from "-----Original" to an empty line, or to skip lines matching pattern "^> [a-zA-z]+: "

    VBA is alien to me, and couldn't write this logic error free :-)

  5. martin says:

    I had a similar problem: some emails, especially long CC lists and titles, end up with a header that takes more than the allowed 4 lines.

    CODE:
    b = False
    For Each myLine In Lines
        If b Then
            newBody = newBody &amp; myLine &amp; vbNewLine
        End If
        If myLine = "> " Then
           b = True
        End If
    Next


    This skips the first empty line as well. Change the order of the two "If" statements to keep it.

  6. Srikanth says:

    Extremely useful macro. Thanks a lot!

  7. ilia says:

    I am new to Outlook world (spent all my life with Linux). Can you tell how to apply (install) this script? Or any reference to documentation?

  8. andrew says:

    this is the code I've been searching for!

    I've been jealous of the stream-lined gmail replies for years now, and have been frustrated by the lack of ability to re-template the replies in Outlook. I've remixed your code into a general purpose macro that is able to perform the same action across all body types.

    Thanks for the head start!


The author does not allow comments to this entry