Mails senden mit Outlook

Wer Access und Outlook auf dem Rechner hat, kann recht einfach von einer Access-Anwendung aus E-Mails verschicken. Wer dies professionell erledigen möchte, muss jedoch einige Punkte beachten – zum Beispiel, beim Einsatz mehrerer Konten das richtige Konto für den Versand auszuwählen. Dieser Beitrag zeigt, wie Sie per VBA auf Outlook zugreifen und E-Mails mit allen Finessen verschicken können.

Verweis auf Outlook-Bibliothek

Wenn Sie von Access aus per VBA auf die Objektbibliothek einer externen Anwendung zugreifen möchten, empfiehlt sich zumindest für die Zeit der Entwicklung die Arbeit mit einem entsprechenden Verweis – Sie können so von IntelliSense profitieren und bei Bedarf später auf Late Binding umstellen. Der Verweis wird etwa unter Access 2010 im Dialog Verweise eingestellt, den Sie mit dem Menübefehl Extras|Verweise des VBA-Editors öffnen (s. Bild 1). Danach starten wir direkt mit einer Prozedur zum Verschicken von E-Mails, die wir zunächst in einem Standardmodul unterbringen. Um auf die Objekte von Outlook zugreifen zu können, deklarieren Sie dort zunächst eine entsprechende Objektvariable:

pic001.png

Bild 1: Verweis auf die Outlook-Bibliothek hinzufügen

Dim objOutlook As Outlook.Application

Diese füllen Sie mit der folgenden Anweisung:

Set objOutlook = New Outlook.Application

Eine E-Mail ist eines der Objekte, die Sie mit einem Klick auf die entsprechende Schaltfläche in Outlook neu erstellen können. Dies gelingt natürlich auch per VBA:

objOutlook.CreateItem olMailItem

Nur mit dieser Anweisung verschwindet die E-Mail allerdings schnell im Nirwana. Sie sollten diese zumindest anzeigen, und dazu speichern wir einen Verweis auf die neu erstellte E-Mail in der folgenden Variablen:

Dim objMail As Outlook.MailItem

Die Erstellung und Zuweisung sieht dann so aus:

Set objMail = objOutlook.CreateItem(olMailItem)

Danach können Sie die E-Mail mit der Display-Methode anzeigen:

objMail.Display

Das Ergebnis sieht wie in Bild 2 aus. Die Felder wie An, CC, Betreff und den Inhalt füllen wir zu Beispielzwecken gleich mithilfe der entsprechenden Eigenschaften:

pic004.png

Bild 4: Outlook kann mehrere Benutzerkonten verwalten.

objMail.To = "andre@minhorst.com"
objMail.Subject = "Beispiel-E-Mail"
objMail.Body = "Dies ist eine Beispiel-E-Mail."

Wenn Sie hinter der Display-Anweisung einen Haltepunkt setzen, können Sie diese Eigenschaften sogar über das Direktfenster eingeben und beobachten, wie sich die Inhalte der entsprechenden Textfelder ändern.

Absender-Konto einstellen

Etwas schwieriger wird es mit dem Absender. Der wird je nach aktuell aktivem Konto unter Outlook beim Erstellen der E-Mail automatisch gefüllt. Zwar lässt sich der Absender per Benutzeroberfläche auswählen (s. Bild 3), das VBA-Objektmodell zeigt sich aber etwas zickig. Die Eigenschaften SenderEMail und SenderName sind schreibgeschützt, die Eigenschaft Sender erwartet ein Objekt aus dem Kontakte-Ordner der aktuellen Outlook-Instanz. Da wir die folgenden Prozeduren so gestalten möchten, dass Sie E-Mails mit alternativen Absendern verschicken können, bauen wir einen Workaround ein, bei dem Sie eines der vorhandenen Benutzerkonten als Absender angeben können – und zwar anhand der E-Mail-Adresse.

pic002.png

Bild 2: Leere, per VBA erstellte Outlook-E-Mail

Dies geschieht mithilfe einer kleinen Funktion, der Sie drei Parameter übergeben:

  • objOutlook: Referenz auf die Outlook-Instanz
  • objMail: Verweis auf das E-Mail-Objekt
  • strSender: Name des auszuwählenden Absenders

Die Funktion sieht wie in Bild 4) und vergleicht deren Eigenschaft SmtpAddress mit der übergebenen Absenderadresse. Hat sie das richtige Konto gefunden, wird dieses der Eigenschaft SendUsingAccount zugewiesen. Außerdem wird die Funktion beendet und der Wert True als Funktionswert zurückgegeben. In der aufrufenden Routine können Sie diese Funktion etwa so nutzen:

Listing 1: Einstellen des Absenders mit Outlook 2007 und jünger

Public Function SetSender(objOutlook As Outlook.Application, objEMail As Outlook.MailItem, strSender As String) As Boolean
    Dim objAccount As Outlook.Account
    For Each objAccount In objOutlook.Session.Accounts
        If objAccount.SmtpAddress = strSender Then
            objEMail.SendUsingAccount = objAccount
            SetSender = True
            Exit Function
        End If
    Next objAccount
End Function

pic003.png

Bild 3: Auswahl des Absenders

If Len(strSender) > 0 Then
    If SetSender(objOutlook, objMail, strSender) = False Then
        MsgBox "Alternativer Absender konnte nicht eingestellt werden."
        Exit Sub
    End If
End If

Dort prüfen Sie, ob ein optionaler Parameter namens strSender gefüllt wurde, und rufen dann die Funktion SetSender mit den bereits deklarierten und gefüllten Variablen objOutlook und objMail sowie der Absenderadresse auf. Gelingt es SetSender nicht, den neuen Absender einzustellen, erscheint eine entsprechende Meldung. Unter älteren Outlook-Versionen lässt sich das zum Versenden verwendete Konto nur über die Registry einstellen.

Empfänger einstellen

Weiter oben haben Sie bereits erfahren, dass Sie den Empfänger mit der To-Eigenschaft einstellen können.

Wenn Sie eine E-Mail gleich an mehrere Empfänger senden möchten, geben Sie die E-Mail-Adressen der Empfänger durch Semikola getrennt als Wert der Eigenschaft To an.

Dies lässt sich jedoch auch eleganter lösen. Die Auflistung Recipients erlaubt das Anfügen eines oder mehrerer Adressaten mit der Add-Methode. Als Parameter geben Sie schlicht die E-Mail-Adresse an. Die folgenden Zeilen fügen beispielsweise zwei E-Mail-Adressen hinzu:

.Recipients.Add "andre@minhorst.com"
.Recipients.Add "info@ribbon-admin.de"

Die Adressen können Sie über diese Auflistung auslesen, aber auch über die Eigenschaft To:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar