Can I send an HTML file as body text using Outlook.MailItem?

Posted on 2008-10-24
Last Modified: 2013-11-27
I'm trying to send an HTML file as 'body text' via MS Access vba using the Outlook.MailItem feature.
I'm able to do it fine with the CDO message object as follows:
objMessage.CreateMHTMLBody "file://c|/temp/test.htm"

But when I try to do this with the Outlook message object, I get an error.
I couldn't find a 'CreateMHTMLBody' option using Outlook objects, so I tried:
objMailMessage.HTMLBody "file://c|/temp/test.htm"
But received an error :(

The reason why I'm trying to use Outlook objects instead of CDO is that I want to save to my Outlook drafts folder.

Question by:Bill543
  • 2
LVL 28

Expert Comment

ID: 22799725
I think you need to create a message template in Outlook using the html page.  Then you can create a new message using that template.  I have some code around here somewhere that does exactly that.  I'll see if I can dig it up.
OM Gang
LVL 28

Accepted Solution

omgang earned 250 total points
ID: 22799786
Found it - it's older code but shows how to create an Outlook message in Access and specify a template to use
OM Gang
Sub SendMessage(Reg As String)

On Error Resume Next

        'declare and open instance of MS Outlook

    Dim olOutlook As New Outlook.Application

    Dim olNS As Outlook.NameSpace

    Dim olFolders As Outlook.MAPIFolder

    Dim olContacts As Outlook.MAPIFolder

    Dim olItems As Outlook.Items

    Dim olConItem As Outlook.ContactItem

    Dim olOutlookMsg As Outlook.MailItem

    Dim olOutlookRecip As Outlook.Recipient

    Dim olOutlookAttach As Outlook.Attachment

    Dim strMsgBody As String, strPST As String

    Dim strCriteria As String

    Dim intCounter As Integer


        'build message body for this region

        'function call - this module

        'returns "Failed" on error

    strMsgBody = BuildMsg(Reg)

    If strMsgBody = "Failed" Then

            'call error handler with specifics - this module

        Call ErrorHandler("BuildMsg", 1, False)

        GoTo Exit_SendMessage

    End If


        'assign name of outlook PST folder we want to use to string


    strPST = "Broadcast"

        'set object Outlook NameSpace

    Set olNS = olOutlook.GetNamespace("MAPI")

        'set object NameSpace Folders for PST file

    Set olFolders = olNS.Folders(strPST)

        'set object Contacts folder for PST file

    Set olContacts = olFolders.Folders("Contacts")

        'set object Contacts in folder

    Set olItems = olContacts.Items


        'assign item category for this region to string variable so

        'we can search for contacts

    strCriteria = Reg & "_Broadcast"


        'loop through list of contacts

    For intCounter = 1 To olItems.Count

        Set olConItem = olItems(intCounter)

            'find contacts for the current region

        If olConItem.Categories = strCriteria Then


                'select message template for this region

            Set olOutlookMsg = olOutlook.CreateItemFromTemplate _

                    ("i:\outlook\templates\" & Reg & "_Broadcast.oft")

            With olOutlookMsg


                Set olOutlookRecip = .Recipients.Add(olConItem.Email1Address)

                olOutlookRecip.Type = olTo

                    'subject, body, importance

                .Subject = "Inventories Available for " _

                        & "Cherry Pick"

                .Body = strMsgBody

                .Importance = olImportanceNormal


                Set olOutlookAttach = .Attachments.Add _

                        ("p:\output\inventory1.pdf", , , "Inventory 1")

                Set olOutlookAttach = .Attachments.Add _

                        ("p:\output\inventory2.pdf", , , "Inventory 2")

                    'resolve recipient name

                For Each olOutlookRecip In .Recipients



                    'display before sending?  add (DisplayMsg As Boolean)

                    'to sub/func declare

                'If DisplayMsg Then

                '    .Display


                '    .Save

                '    .Send

                'End If



            End With

        End If


    Next intCounter


        'clear object variables

    Set olOutlookAttach = Nothing

    Set olOutlookRecip = Nothing

    Set olOutlookMsg = Nothing

    Set olConItem = Nothing

    Set olItems = Nothing

    Set olContacts = Nothing

    Set olFolders = Nothing

    Set olNS = Nothing

    Set olOutlook = Nothing

    Exit Sub

End Sub

Open in new window


Author Closing Comment

ID: 31509811
Thanks! As usual you pulled through. Your solution worked for me.
I needed to add/edit the below line from your code:
'select message template for this region
Set olOutlookMsg = olOutlook.CreateItemFromTemplate _
("i:\outlook\templates\" & Reg & "_Broadcast.oft")

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

In the article entitled Working with Objects – Part 1 (, you learned the basics of working with objects, properties, methods, and events. In Work…
Experts-Exchange is a great place to come for help with solutions for your database issues, and many problems are resolved within minutes of being posted.  Others take a little more time and effort and often providing a sample database is very helpf…
What’s inside an Access Desktop Database. Will look at the basic interface, Navigation Pane (Database Container), Tables, Queries, Forms, Report, Macro’s, and VBA code.
In Microsoft Access, learn the trick to repeating sub-report headings at the top of each page. The problem with sub-reports and headings: Add a dummy group to the sub report using the expression =1: Set the “Repeat Section” property of the dummy…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now