Outlook: E-Mail-Absender per VBA einstellen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Die üblichen Artikel über das Versenden von E-Mails über Outlook per VBA lassen meist unberücksichtigt, wie man den Absender einer E-Mail einstellen kann. Dies kann nicht durch einfaches Zuweisen der Absender-Adresse geschehen, da der Absender unter Outlook in einem Konto vorhanden sein muss. Die passende Eigenschaft heißt SendUsingAccount. Wie wir diese füllen, wie wir die verfügbaren Absender-E-Mail-Adressen ermitteln und welche Besonderheit bei Verwendung von Late Binding zu beachten sind, zeigen wir in diesem Beitrag.

Absender in Outlook auswählen

Wenn Sie in Outlook eine neue E-Mail erstellen, können Sie aus den vorhandenen Konten die gewünschte Absenderadresse auswählen (siehe Bild 1).

E-Mail-Konten, die als Absender eingestellt werden können

Bild 1: E-Mail-Konten, die als Absender eingestellt werden können

Wenn wir per VBA eine neue E-Mail erstellen, können wir zwar leicht den Empfänger, den Betreff, den Inhalt und andere Informationen zuweisen.

Wenn wir jedoch den Absender festlegen wollen, finden wir lediglich die Eigenschaft SendUsingAccount vor.

Diese nimmt jedoch keine E-Mail in Form einer Zeichenkette entgegen, sondern erwartet ein Objekt des Typs Account.

Also stellen wir im vorliegenden Beitrag ein Beispiel vor, mit dem Sie den gewünschten Absender auswählen und zuweisen können, sodass diese E-Mail vom entsprechenden Konto aus versendet werden kann.

Beispielformular

Zu diesem Zweck haben wir ein Formular erstellt, mit dem wir die gängigen Daten einer E-Mail eingeben können. Hauptsächlich wollen wir damit aber den Absender auswählen können (siehe Bild 2).

Formular zum Erstellen von E-Mails

Bild 2: Formular zum Erstellen von E-Mails

Damit uns beim Ausprobieren immer gleich ein paar Daten vorliegen, füllen wir die Felder beim Laden des Formulars mit der Prozedur aus Listing 1. Hier stellen wir insbesondere für das Kombinationsfeld zur Auswahl des Absenders die Eigenschaft Herkunftsart (RowSourceType) auf Wertliste ein (Value List).

Private Sub Form_Load()
     With Me!cboVon
         .RowSourceType = "Value List"
         .RowSource = AbsenderEinlesen
         .Value = .ItemData(0)
     End With
     Me!txtAn = Me!cboVon.ItemData(0)
     Me!txtBetreff = "Beispiel-E-Mail"
     Me!txtInhalt = "Dies ist eine Beispiel-E-Mail."
End Sub

Listing 1: Füllen der Formularfelder beim Öffnen des Formulars

Außerdem weisen wir der Eigenschaft Datensatzherkunft das Ergebnis einer Funktion namens AbsenderEinlesen zu und wählen direkt den ersten Eintrag als Standardwert aus.

Outlook per VBA und Early Binding programmieren

Damit wir beim Programmieren der Outlook-Elemente die Vorteile von Early Binding wie IntelliSense nutzen können, fügen wir dem VBA-Projekt über den Verweise-Dialog (Extras|Verweise) einen Verweis auf die Bibliothek Microsoft Outlook x.0 Object Library hinzu (siehe Bild 3).

Verweis auf die Outlook-Objektbibliothek

Bild 3: Verweis auf die Outlook-Objektbibliothek

Absender aus Outlook einlesen

Outlook bietet mit Accounts eine Auflistung an, die alle Konten der lokalen Outlook-Instanz enthält – unabhängig davon, ob diese in einer .pst-Datei liegen oder auf mehrere verteilt sind. Die Accounts-Auflistung durchlaufen wir in der Prozedur aus Listing 2 und weisen das aktuelle Objekt jeweils der Variablen objAccount zu. Dieses liefert mit der Eigenschaft SmtpAddress die E-Mail-Adresse, die wir als Absenderadresse nutzen können.

Public Function AbsenderEinlesen() As String
     Dim objOutlook As Outlook.Application
     Dim objMAPI As Outlook.NameSpace
     Dim objAccount As Outlook.Account
     Dim strAccounts As String
     Set objOutlook = New Outlook.Application
     Set objMAPI = objOutlook.GetNamespace("MAPI")
     For Each objAccount In objMAPI.Accounts
         strAccounts = strAccounts & objAccount.DisplayName & ";"
     Next objAccount
     AbsenderEinlesen = strAccounts
End Function

Listing 2: Einlesen einer Liste der möglichen Absenderadressen

[

In der Schleife hängen wir die E-Mail-Adressen aller Elemente in einer String-Variablen namens strAccounts hintereinander und trennen diese jeweils durch ein Semikolon. Dann geben wir diese Zeichenkette als Funktionsergebnis zurück. Auf diese Weise können wir mit dem Kombinationsfeld eine der Absenderadressen der verschiedenen Konten auswählen.

Absender für E-Mail einstellen

Mit der Schaltfläche cmdEMailAnzeigen wollen wir eine neue E-Mail erstellen und sie mit den im Formular angegebenen Daten füllen, bevor wir die E-Mail in Outlook anzeigen (siehe Listing 3).

Private Sub cmdEMailAnzeigen_Click()
     Dim objOutlook As Outlook.Application
     Dim objMailItem As Outlook.MailItem
     Dim objAccount As Outlook.Account
     Set objOutlook = New Outlook.Application
     Set objMailItem = objOutlook.CreateItem(olMailItem)
     With objMailItem
         .To = Me!txtAn
         .Subject = Me!txtBetreff
         .Body = Me!txtInhalt
         If AccountHolen(Me!cboVon, objAccount) = True Then
             .SendUsingAccount = objAccount
         Else
             MsgBox "Account zu ''" & Me!cboVon & "'' nicht gefunden.", vbOKOnly + vbExclamation, "Nicht gefunden"
             Exit Sub
         End If
         .Display
     End With
End Sub

Listing 3: Anzeigen der erstellten E-Mail

Die Prozedur erstellt eine neue Outlook-Instanz oder setzt einen Verweis auf die eventuell bereits bestehende Instanz. Dann legt sie mit der CreateItem-Methode und dem Parameter olMailItem ein neues MailItem-Objekt an. Diesem weisen wir anschließend zunächst die in den Textfeldern enthaltenen Werte zu. Dann wird es spannend, wenn wir den Absender festlegen wollen. Die dazu verwendete Eigenschaft SendUsingAccount erwartet ein Objekt des Typs Account als Wert, sodass wir nicht einfach die E-Mail-Adresse für den Absender zuweisen können. Wir müssen zuvor das Account-Objekt zu der E-Mail-Adresse ermitteln, die aktuell im Kombinationsfeld cboVon ausgewählt ist.

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

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar