1

This code is in MS Access (2010) VBA, using the Redemption library with Microsoft Outlook 2010.

I had this process working before, but we recently had a Citrix upgrade that I guess reset something in my Outlook and now the process no longer works.

I have a folder of .msg files which are basically pre-made email templates with all the proper formatting, images, text, etc.

This is what I was doing before:

Dim outlookApp As Object, namespace As Object
Dim oItem, MyItem

Set outlookApp = CreateObject("Outlook.Application")
Set namespace = outlookApp.GetNamespace("MAPI")
namespace.Logon

Set MyItem = outlookApp.CreateItemFromTemplate(path_to_dot_msg_file)

'And then there are many calls like this:
MyItem.HTMLBody = Replace(MyItem.HTMLBody, "Dear Person,", "Dear  " & name)
'...

Set safeItem = CreateObject("Redemption.SafeMailItem")
Set oItem = MyItem
safeItem.Item = oItem


'this next line displays the email, and as of this line, it looks correct
'safeItem.Display  

'but as of this line, the issue occurs
safeItem.HTMLBody = "<p>This is an extra message that shows up before the .msg file</p>" & safeItem.HTMLBody


safeItem.Recipients.ResolveAll
safeItem.Send

Now when the email is sent, the .msg contents aren't present at all -- the only thing that shows up is the "extra message" that I prepended to the HTMLBody.

What do I need to change or update? Is this something I need to change in the code, or in my Outlook settings, etc?

Extra: body insertion:

Function insertStringBodyTag(htmlBody As String, stringToInsert As String)
    Dim s As String
    Dim i As Integer
    s = htmlBody
    i = InStr(1, s, "<body")
    i = InStr(i, s, ">")
    s = Left(s, i) & stringToInsert & Right(s, Len(s) - i)
    insertStringBodyTag = s
End Function

'Called with safeItem.htmlBody = insertStringBodyTag(safeItem.htmlBody, prefix_string)
Erik A
  • 31,639
  • 12
  • 42
  • 67

1 Answers1

0

You cannot concatenate 2 HTML strings and expect a valid HTML string back - the two must be merged - find the position of the "<body"substring in the original HTML body, then find the positon of the following ">" (this way you take care of the body element with attributes), then insert your HTML string following that ">".

Dmitry Streblechenko
  • 62,942
  • 4
  • 53
  • 78