The code I’m sharing with you today will enable you to send an email using VBA through Lotus Notes. It uses late binding so you do not need to use references to Lotus Notes, which in turn means you do not need to worry about your users Lotus Notes version. I say this, though in practise this may not always be the case. Lotus Notes is often rather frustrating, as many users will testify :)
As well as the subject and message body the routine allows you to specify the To, Cc and Bcc fields within a standard email format.
The example below shows the code to attach a single file. This could easily be amended to loop through an array or collection of file addresses.
Sub SendAnEmailViaLotusNotes()Dim WS As Object
Dim Session As Object
Dim DB As Object
Dim uiDB As Object
Dim NotesAttach As Object
Dim NotesDoc As Object
Dim RichTextBody As Object
Dim RichTextAttachment As Object
Dim StyleBold As Object
Dim StyleNorm As Object
Dim StyleUnderline As Object
Dim StyleFont10 As Object
Dim Server As String
Dim MailFile As String
Dim TheUser As String
Dim UserSig As String
Dim strEmailTo As String ' email To field
Dim strEmailCc As String ' email Cc field
Dim strEmailBcc As String ' email Bcc field
Dim strEmailSbj As String ' email Subject
Dim strEmailBdy As String ' email Body (message text)
Dim strEmailAtt As String ' email attachment
Application.DisplayAlerts = False ' turn off Excel alerts
On Error GoTo ErrorMsg ' on error goto ErrorMsg section...
' --- Set-up connection to Lotus Notes and Create Email object
Set WS = CreateObject("Notes.NotesUIWorkspace")
Set Session = CreateObject("Notes.NotesSession")
TheUser = Session.UserName
UserSig = Session.CommonUserName
Server = Session.GetEnvironmentString("MailServer", True)
MailFile = Session.GetEnvironmentString("MailFile", True)
Set DB = Session.GetDatabase(Server, MailFile)
Set uiDB = WS.CURRENTDATABASE
Set NotesDoc = DB.CreateDocument
Set RichTextBody = NotesDoc.CreateRichTextItem("Body")
' --- Set-up dist list, message and attachments
strEmailTo = ""
strEmailCc = ""
strEmailBcc = ""
strEmailSbj = ""
strEmailBdy = ""
strEmailAtt = ""
NotesDoc.SendTo = strEmailTo ' To...
NotesDoc.CopyTo = strEmailCc ' Cc...
NotesDoc.BlindCopyTo = strEmailBcc ' Bcc...
NotesDoc.Subject = strEmailSbj ' The subject
NotesDoc.Body = strEmailBdy ' Any text to be in the email
' Attach a file
If strEmailAtt <> "" Then
Set RichTextAttachment = NotesDoc.CreateRichTextItem("Attachment")
Set NotesAttach = RichTextAttachment.EmbedObject(1454, "", strEmailAtt)
End If
' --- Send the email / save the message in 'Sent' items
' False would not save the sent email to the sent items folder
NotesDoc.SAVEMESSAGEONSEND = True
' Not sure why, but false send the eamil ?
NotesDoc.SEND False
' --- Close connection to free memory
Set Session = Nothing
Set DB = Nothing
Set NotesAttach = Nothing
Set NotesDoc = Nothing
Set WS = Nothing
' Turn on Excel alerts
Application.DisplayAlerts = True
Exit Sub
' --- if an error occurs display a message... then exit the macro
ErrorMsg:
If Err.Number = 7225 Then
MsgBox "The file " & strEmailAtt & " cannot be found in the specified location", vbOKOnly, "Error"
Else
MsgBox Err.Number & Err.Description
End If
Application.DisplayAlerts = True
End Sub
As always, if you have any questions do let us know via the comments section.
Access, Email, Excel, Lotus Notes, VBA
Exactly what I was looking for.. :-)) Cheers Guys.. GOD Bless You...
ReplyDeleteI hope this code still works, need to try it out but thanks anyway!
ReplyDeleteDo you know if there is any way to make the email come from an anonymous email account? Maybe have the sender hidden when the email appears in the recipient's inbox?
ReplyDelete