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).
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).
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).
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