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

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar