VBA script to convert emails via markdown

Jared Martin martin.jared at gmail.com
Thu Sep 12 12:48:15 EDT 2013


I hate Microsoft's GUI interface, and I love Markdown (I am an active
stackoverflow user). But for work, I have to use Outlook. So I thought,
well, maybe I can write emails in Markdown, and use VBA to convert them.

This almost works, actually. The problem is that markdown doesn't create
paragraphs the way Office wants them, when encoding the raw body text.
Below is the VBA script I wrote... feel free to adapt and use, if you can
figure out how to fix the paragraphing problem... but if you do, let me
know! Note also that you should add a reference to the "Microsoft Scripting
Runtime" in Tools -> References.

Thanks in advance,
Jared

Option Explicit

Public Declare PtrSafe Sub Sleep Lib "kernel32" ( _
ByVal dwMilliseconds As LongLong)

' DON'T FORGET TO CHANGE THESE
Private Const pathToPerl = "C:\your\path\to\perl.exe"
Private Const pathToScript = "C:\your\path\to\Markdown.pl"
Private Const tempFileName = "\markdown.text"

Sub Markdown()
Dim myItem As MailItem
Dim tempAbsolutePath As String
Dim position As Long, endPosition As Long
Dim prefix As String, converted As String

'get currently active email
If (Not Application.activeInspector.IsWordMail) Then Exit Sub
Set myItem = Application.activeInspector.CurrentItem

If (Not myItem.BodyFormat = olFormatHTML) Then
myItem.BodyFormat = olFormatHTML
End If

position = InStr(1, myItem.HTMLBody, "<BODY", vbTextCompare)
endPosition = InStr(position, myItem.HTMLBody, ">", vbTextCompare)
prefix = Left$(myItem.HTMLBody, endPosition)

' Store the in progress email in a temp file
tempFileAbsolutePath = IIf(Environ$("tmp") <> "", Environ$("tmp"),
Environ$("temp")) & tempFileName

Open tempAbsolutePath For Output As #1
Print #1, myItem.Body
Close #1

converted = ConvertFile(tempAbsolutePath)
myItem.HTMLBody = prefix & converted & "</body></html>"
End Sub

Private Function ConvertFile(emailFile As String)
Dim oWsc As Object
Set oWsc = CreateObject("WScript.Shell")
Dim oExec As Object
Dim execCommand As String
execCommand = pathToPerl & " " & pathToScript & " " & emailFile

Set oExec = oWsc.Exec(execCommand)
While oExec.Status <> 1 ' Wait for process
Sleep 100
Wend
ConvertFile = oExec.StdOut.ReadAll()
Set oWsc = Nothing
Set oExec = Nothing
End Function
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://six.pairlist.net/pipermail/markdown-discuss/attachments/20130912/81c7f44d/attachment.html>


More information about the Markdown-Discuss mailing list