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