VBA Tipp: Outlook

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

  • Ich möchte ein E-Mail aus Access über Outlook versenden.
  • Das E-Mail wird standardmäßig in Outlook geöffnet. Alternativ kann es auch sofort versandt werden, ohne es zu öffnen.
  • Alternativ kann ein Anhang angefügt werden. Mehrere Anhang-Dateipfade werden mit einem Strichpunkt getrennt.

Lösung

Das geht mit folgender Prozedur, die in einem globalen Modul hinterlegt wird.

Public Sub MailversandOutlook(ByVal Empfänger As String, _
                              ByVal Betreff As String, _
                              ByVal Nachricht As String, _
                              Optional ByVal HTML As Boolean = False, _
                              Optional ByVal SofortSenden As Boolean = False, _
                              Optional ByVal Anhänge As String = vbNullString)
 
 'Late-Binding-Variante, kein Verweis auf Microsoft Outlook xx.x Object Library notwendig
 'Hinweis: Wenn ein Parameterwert direkt aus einem Formularfeld ausgelesen werden soll,
 'muß die Eigenschaft .Value explizit gesetzt werden, z.B. objItem.To = Me!MeinTextfeld.Value
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim objApp As Object   'Outlook Application
 Dim objItem As Object  'Outlook.MailItem
 Dim strarr() As String
 Dim varElement As Variant
 Const olMailItem = 0
 Const olFormatPlain = 1
 Const olFormatHTML = 2
 
 'Erzeugen einer Outlook-Instanz
 Set objApp = CreateObject("Outlook.Application")
 
 'Erzeugen einer Mail-Nachricht
 Set objItem = objApp.CreateItem(olMailItem)
 
 'Empfänger
 objItem.To = Empfänger
 
 'Betreff
 objItem.Subject = Betreff
 
 'Nachricht im HTML-Format
 If HTML = True Then
   objItem.BodyFormat = olFormatHTML
   objItem.HTMLBody = Nachricht
 
 'Nachricht im Plaintext-Format
 Else
   objItem.BodyFormat = olFormatPlain
   objItem.Body = Nachricht
 End If
 
 'Anhänge anfügen
 If Not Anhänge = vbNullString Then
   strarr() = Split(Anhänge, ";")
   For Each varElement In strarr()
     objItem.Attachments.Add varElement
   Next varElement
 End If
 
 'Mail sofort versenden, ohne Outlook zu öffnen
 If SofortSenden = True Then
   objItem.Send
 
 'Mail in Outlook anzeigen, anschließend manuell versenden
 Else
   objItem.Display
 End If
 
 Set objItem = Nothing
 Set objApp = Nothing
 
End Sub

Aufruf

 Dim strAnhang As String
 Dim strEmpfänger As String
 Dim strBetreff As String
 Dim strNachricht As String
 Dim strHTMLNachricht As String
 
 'Pfad und Name des Dateianhangs
 strAnhang = CurrentProject.Path & "\" & "Rechnung.pdf"
 
 'Alternativ: mehrere Dateianhänge, einzelne Pfade mit Trennzeichen ";" addieren
 'Beispiel:
 'strAnhang = CurrentProject.Path & "\ErsterAnhang.pdf"
 'strAnhang = strAnhang & ";" & CurrentProject.Path & "\ZweiterAnhang.txt"
 
 'Mailadresse des Empfängers
 strEmpfänger = "hans.mustermann@t-online.de"
 
 'Mail-Betreff
 strBetreff = "Ihre Rechnung"
 
 'entweder Beispiel für normale Textnachricht
 strNachricht = "Sehr geehrter Kunde, " & vbCrLf & vbCrLf
 strNachricht = strNachricht & "anbei finden Sie die Rechnung zur Ihrer Bestellung." & vbCrLf & vbCrLf
 strNachricht = strNachricht & "Viele Grüße"
 
 'oder alternativ Beispiel für HTML-Textnachricht (ggf. mit einem HTML-Editor erzeugen)
 strHTMLNachricht = "<html>"
 strHTMLNachricht = strHTMLNachricht & "<p>Sehr geehrter Kunde, <br /><br />"
 strHTMLNachricht = strHTMLNachricht & "anbei finden Sie die Rechnung zur Ihrer Bestellung.<br /><br />"
 strHTMLNachricht = strHTMLNachricht & "Viele Grüße</p>"
 strHTMLNachricht = strHTMLNachricht & "</html>"
 
 
 
 'Versand-Beispiele:
 'Beispiel 1: Mail öffnen, mit normaler Textnachricht
 Call MailversandOutlook(strEmpfänger, strBetreff, strNachricht)
 
 'Beispiel 2: Mail mit Anhang öffnen, mit normaler Textnachricht
 Call MailversandOutlook(strEmpfänger, strBetreff, strNachricht, , , strAnhang)
 
 'Beispiel 3: Mail mit Anhang sofort versenden, mit normaler Textnachricht
 Call MailversandOutlook(strEmpfänger, strBetreff, strNachricht, , True, strAnhang)
 
 'Beispiel 4: Mail mit Anhang sofort versenden, mit HTML-Textnachricht 
 Call MailversandOutlook(strEmpfänger, strBetreff, strHTMLNachricht, True, True, strAnhang)


Wiki hinweis.png

Hinweis: Einige Outlook-Versionen (vermutlich Outlook 2000 bis Outlook 2003), nämlich solche, die mit dem Security-Update ausgestattet wurden, lassen bei Zugriff mit diesem Code erst die Meldung erscheinen: "Soll der Zugriff durch ein externes Programm zugelassen werden?", was sich auch nicht abschalten lässt. Es gibt mit dem Zusatztool ClickYes jedoch die Möglichkeit, dies zu unterbinden (siehe Web-Links).


Wiki-Links

Web-Links