VBA Outlook Makro bei E-Mail Empfang automatisch ausführen

Möchte man innerhalb von Outlook eine E-Mail direkt mit VBA weiterverarbeiten, zum Beispiel verschieben, nachdem diese im Posteingang eingetroffen ist, so kann man in vielen Fällen dafür die Regeln von Outlook nutzen.

Für spezielle Anforderungen, wie zum Beispiel dem automatischen Speichern von Anhängen, kommt man mit den Outlook-Regeln jedoch schnell an seine Grenzen. Denn für solche Funktionalitäten kommt meist ein VBA-Makro zum Einsatz.

In früheren Versionen von Outlook konnten man noch “Nach Erhalt einer Nachricht von … ein Skript ausführen“ in den Outlook-Regeln einstellen. Doch das wurde aus Sicherheitsaspekten abgeschafft. Laut einigen Foren kann man dies wieder aktivieren, indem man den Registry-Editor aufruft und den Key EnableUnsafeClientMailRules auf 1 setzt.

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security
DWORD: EnableUnsafeClientMailRules
Value: 1

Bei meinem Outlook365 gab es aber bereits auch diese Lösung nicht mehr.

Microsoft Office 365: Das umfassende Handbuch für...
  • Widl, Markus (Autor)
  • 1235 Seiten - 23.08.2019 (Veröffentlichungsdatum) - Rheinwerk Computing (Herausgeber)

Makro nach Eintreffen der E-Mail im Posteingang ausführen

Microsoft empfiehlt an dieser Stelle auf das NewMail Event zu setzen oder besser noch NewMailEx Ereignis. Damit kann man E-Mails automatisch per VBA verarbeiten, wenn diese im Posteingang empfangen werden. So ist es zum Beispiel möglich einen E-Mail Anhang automatisch zu drucken, wenn dieser von einem bestimmten Absender kommt, sofort in dem Moment in welchem die E-Mail eintrifft.

Damit lassen sich viele Automatisierungsaufgaben lösen, ohne dass man zig Klicks tätigen muss.

 VBA Application_NewMailEx() verwenden

In dem nachfolgenden VBA-Code ist das Grundgerüst zum Ausführen eines Makros bei E-Mail-Eingang. Es ist darauf zu achten, dass die Methode Application_NewMailEx innerhalb „ThisOutlookSession“ implementiert wird.

Screenshort Visual Basic Editor Outlook
Application_NewMailEx Methode einfügen in ThisOutlookSession

Beide Methoden Application_NewMail und Application_NewMailEx werden noch vor den definierten Outlook-Regeln ausgeführt.

In dem Beispiel findet mit der Eigenschaft Item.SenderEmailAddress eine Überprüfung der Absenderadresse statt. Viele weitere Überprüfungen, wie zum Beispiel auf den Betreff (Item.Subject), sind denkbar. Innerhalb dieser If-Anweisung kann man dann weiteren Code ausführen oder Makros aus anderen Modulen ausführen.

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim Item As Object
Dim Email As String
Set Item = Session.GetItemFromID(EntryIDCollection)
Item.Save
'Absender E-Mail Adresse ermitteln
Email = Item.SenderEmailAddress
'Überprüfen, ob E-Mail von bestimmten Absender
If Email = "vorname.nachname@ekiwi.de" Then
'weiteren Code und Makros hier ausführen
Modul1.MeinMakro
Debug.Print "Die richtige Mail lautet: " + Email
Else
Debug.Print "Falsche Mail lautet: " + Email
End If
End Sub

Will man Methoden aus anderen Modulen an dieser Stelle ausführen, muss man darauf achten, dass diese als public deklariert sind.

Hinweis: Wer Debug.Print zum Testen benutzt muss sich über Ansicht => Direktfenster (Strg+G) das Ausgabefenster einblenden im VBA-Editor. Für Programmierer anderer Programmiersprachen sicherlich ein ungewohntes Wording.

Bestseller Nr. 1
VBA mit Excel: Das umfassende Handbuch für...
  • Held, Bernd (Autor)
  • 1016 Seiten - 20.12.2019 (Veröffentlichungsdatum) - Rheinwerk Computing (Herausgeber)
Bestseller Nr. 2
Einstieg in VBA mit Excel: Makro-Programmierung...
  • Theis, Thomas (Autor)
  • 499 Seiten - 25.05.2020 (Veröffentlichungsdatum) - Rheinwerk Computing (Herausgeber)

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.