Skip to main content

Programmatically send email in Access using VBA and Outlook

When I first wrote my early Access system I used a function I setup in Outlook and then I called that. On upgrading I had a few problems with the older method then I found some help on the MSDN website here... and the related video.

The first thing to do before starting the code is go into access, access the VBA (press Ctl+G) then click on "Tools" The "References" and then make sure you scroll down to "Microsoft Outlook ..." the version there will be determined by what version you have installed. This the code that I ended up with after looking at the site above

Private olApp As Outlook.Application
Private olNameSpace As Outlook.NameSpace

' The basics of this from MSDN site
' http://msdn.microsoft.com/en-us/library/ee208547(v=office.12).aspx
Private Sub InitOutlook()
 ' Initialize a session in Outlook
  Set olApp = New Outlook.Application

  'Return a reference to the MAPI layer
  Set olNameSpace = olApp.GetNamespace("MAPI")

  'Let  user logon to Outlook with the Outlook Profile dialog box
  ' if not already logged in and then create a new session
  olNameSpace.Logon , , True, False
End Sub

Private Sub CleanUp()
  ' Clean up public object references.
  Set olNameSpace = Nothing
  Set olApp = Nothing
End Sub

'SendMAPIEmailto replace the older one
Public Function SendMAPIEmail(strTo As String, _
          strSubject As String, _
          strMessageBody As String, _
          Optional strAttachmentPaths As String, _
          Optional strCC As String, _
          Optional strBCC As String, _
          Optional strReplyTo As String, _
          Optional dtDTWhen As Date) As Boolean
        
  Dim mailItem As Outlook.mailItem
  Dim bSuccess As Boolean

  ' assume success but set error trap
  bSuccess = True

On Error GoTo Abort

  ' if calling in a loop perhaps remove then clean, at end of loop
  InitOutlook
  If Not olApp Is Nothing Then
   Set mailItem = olApp.CreateItem(olMailItem)

   mailItem.To = strTo
   mailItem.Subject = strSubject

   ' mailItem.Display
   mailItem.HTMLBody = strMessageBody
   '------------ add all the optional items
   ' attachments
   If Not IsMissing(strAttachmentPaths) Then
    If (strAttachmentPaths <> "") Then
     Dim myAttachements As Outlook.Attachments
     Set myAttachements = mailItem.Attachments
     ' may need a little more work here
     myAttachements.Add strAttachmentPaths
    End If
   End If
   ' CC string
   If Not IsMissing(strCC) Then
    If strCC <> "" Then
     mailItem.CC = strCC
    End If
   End If
   ' BCC string
   If Not IsMissing(strBCC) Then
    mailItem.BCC = strBCC
   End If
   ' ReplyTo string
   If Not IsMissing(strReplyTo) Then
    mailItem.ReplyRecipients.Add strReplyTo
   End If
   ' dtDTWhen string
   If Not IsMissing(dtDTWhen) Then
    mailItem.DeferredDeliveryTime = dtDTWhen
   End If
'   When debugging this is useful
'   mailItem.Display

   mailItem.Send

   GoTo EndSend
  End If

' if we get here then something wne wrong
Abort:
  bSuccess = False
' clean up and exit
EndSend:
  CleanUp
  SendMAPIEmail = bSuccess

End Function
I prefer to use MAPI, since then I can see a log of what has been sent to whom. If you do that use SMTP, then you need to place the email results in a log of some sort.

Comments

Popular posts from this blog

Bitcoin / Cryptocurrency – what is it and how can I benefit

What is it I started investigating Bitcoin when it was worth just over $1000 a bitcoin. I was interested in what it was and how it worked. A lot of people are saying we missed the boat, but I believe that everyone should at least try put a little money in now, or at least use a faucet (see below) to make a little micro-currency. You can read a Wiki article about bitcoin and its history etc. But what you need to know is that it is a currency, that is independent of country. No one really knows who invented the concept of a cryptocurrency since the person who published the paper used a nom de plume. All new cryptocurrencies work more or less the same way as Bitcoin. So as I explain below I interchange these terms. Bitcoin is the original cryptocurrency. How Bitcoin works The currency releases a coin based on a mathematical formula. There will never be more than 21 million bitcoins (other cryptocurrencies do not work like this). Each bitcoin can have divided into one hundred mil...

Access conversion NOTE1: default DateSerial in VBA/Access to SQL

I have started slowly converting my Access database to SQL. The reason is that I would like to take the application online. After trying to use Access's (version 2007) transfer tool, which did not work that well. I found Microsoft's SQL Migration Assistant 2008 for Access, nicknamed SSMA. Which you can download here . When you install there is a niggle about the license, which you need to download into their specified directory and it must be the name they provide. So about the create table. My one table would not convert and I could not see why. After looking at the SQL command I saw the problem was the use of DateSerial. I googled a few sites and could not find an answer The CREATE TABLE line was: [RequireUntilDate] datetime2(0) DEFAULT DateSerial(1980,1,1) NOT NULL, I clicked on the whole command and copied it and then in SQL Server Management Studio, I tried to create the table and found that if I specified the date in US date format it worked: [RequireUnti...

SMTP servers of South Africa

SMTP Settings Below is a list of SMTP sites in South Africa, using this and the ISP Map you can try and find which one works best for you. Telkom smtp.saix.net (ADSL) smtp.telkomsa.co.za (56k dial up) smtp.telkomsa.net Internet Solutions smtp.isdsl.net (ADSL) smtp.dial-up.net (56k dial up on IS) smtp.layerone.net (3g backbone) Vodacom smtp.vodacom.co.za smtp.vodamail.co.za MTN smtp.mtn.co.za Cell C smtp.cellc.co.za (GPRS) mail.cmobile.co.za (also used by Virgin) ABSA mail.absa.co.za iBurst smtp.wbs.co.za smtp.iburst.co.za @lantic smtp.lantic.net (ADSL,Dialup, ISDN) Sentech smtp.sentech.co.za MWEB smtp.mweb.net (ADSL) - this is to be retired End June 2012, use below instead smtp.mweb.co.za (56k dial-up & ADSL & business) iAfrica smtp.uunet.co.za smtp.iafrica.com Neotel smtp.neotel.co.za Tiscali NOW MWeb smtp.tiscali.co.za Netactive NOW MWeb smtp.netactive.co.za Global smtp.global.co.za Hertzner Use y...