window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Outlook-E-Mails importieren

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

über die Automationsschnittstelle von Outlook erhalten Sie Zugriff erhalten Sie Zugriff auf fast alle Aspekte der Anwendung. Das Versenden von E-Mails über das Outlook-Objektmodell aus Access heraus etwa wurde bereits in früheren Beiträgen dargestellt. Hier geht es nun um das Auslesen von E-Mails und deren Import in die Tabellen einer Datenbank. Ein einfaches Formular, welches die Mails zur Anzeige bringt, fehlt ebenfalls nicht.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1611_OutlookMails.accdb

Die Schnittstelle zu Outlook

Für den Zugriff auf Outlook benötigen Sie einen zusätzlichen Verweis im VBA-Projekt Ihrer Datenbank. Sie markieren im Verweise-Dialog des Menüs Extras den folgenden Eintrag: Microsoft Outlook xx.0 Object Library. Das xx ist die Versionsnummer Ihres Office-Pakets, welche bei Office 2010 etwa 14 lautet. Im Objektkatalog finden Sie anschließend das Objektmodell unter der Rubrik Outlook, in dem die Klasse Application den Ausgangspunkt für alle weiteren Aktionen darstellt.

Vor die Automation, also die Fernsteuerung, von Outlook hat Microsoft allerdings einen Riegel geschoben, da es hier um sicherheitsrelevante Daten gehen kann. In früheren Office-Versionen erschien beim automatisierten Zugriff grundsätzlich der sogenannte Security Guard. Das ist ein kleiner Dialog, der anzeigt, wenn offenbar Zugriff auf die Elemente von Outlook erhalten werden soll. Dies ist zu bestätigen, weil sonst die Schnittstelle erst gar nicht freigeschaltet wird. Außerdem ist dieser Zugriff zeitlich eingeschränkt.

In den neueren Versionen wurde dieses Verhalten geändert. Der Dialog erscheint nur dann, wenn kein funktionstüchtiges Antiviren-Programm installiert ist. Die Existenz eines solchen scheint ausreichend zu sein.

Wie die Seite für den Programmgesteuerten Zugriff im Sicherheitscenter der Optionen von Outlook zeigt (Bild 1), sind sämtliche Auswahlmöglichkeiten deaktiviert, wenn Windows ein akzeptiertes Antiviren-Programm vorfindet. In diesem Fall, von dem wir auch ausgehen, brauchen Sie sich um weiter nicht zu kümmern.

Die Sicherheitseinstellungen von Outlook beim Zugriff über Automation

Bild 1: Die Sicherheitseinstellungen von Outlook beim Zugriff über Automation

Outlook-Application

Alle Elemente von Outlook erreichen Sie über dessen Application-Objekt. Sie erzeugen eine neue Instanz des Objekts, das die Outlook-Anwendung wiederspiegelt, am besten über diese Funktion:

Dim objOL As Outlook.Application
Set objOL = CreateObject( _
              "Outlook.Application")

Dabei spielt es keine Rolle, ob Outlook bereits geöffnet ist. Denn Outlook lässt ja auch manuell keine mehrfachen Anwendungsinstanzen zu. CreateObject führt damit bei bereits geöffnetem Outlook zum gleichen Resultat, wie GetObject.

über die Variable objOL können Sie sich nun daran machen, alle Aspekte der Anwendung zu inspizieren. Möglicherweise benötigen SIe die Variable auch in anderen Prozeduren, und dann macht es Sinn, für sie eine Hilfsfunktion zu erstellen, wie in Listing 1. Auf erneute Instanziierungen der Objektvariablen in Ihren Routinen können Sie nun verzichten, indem Sie einfach die Funktion OLApp abrufen, die ihrerseits auf die im Modulkopf definierte Variable m_OL zugreift.

Public m_OL As Outlook.Application
Function OLApp() As Outlook.Application
     If m_OL Is Nothing Then Set m_OL = CreateObject("Outlook.Application")
     Set OLApp = m_OL
End Function

Listing 1: Genereller Zugriff auf eine Outlook-Instanz über die Hilfsfunktion OLApp

War Outlook noch nicht offen, so startet die Routine eine neue Instanz der Anwendung. Davon bekommen Sie zunächst allerdings nichts mit, denn die Visible-Eigenschaft von Application steht auf False. Lediglich das Outlook-Symbol im Infobereich der Taskleiste weist Sie auf den Start hin.

Nun möchten Sie im Prinzip nicht die Anwendung fernsteuern, sondern E-Mails auslesen. Dazu begeben Sie sich eine Ebene tiefer auf die MAPI-Umgebung, welche für den E-Mail-Verkehr zuständig ist:

Dim objNS As Outlook.NameSpace
Set objNS = OLApp.GetNamespace("MAPI")

Dieser Namespace erlaubt nun die Navigation durch die Ordner und deren Inhalte von Outlook.

Ordner und Unterordner

Wie der Windows-Explorer auch, gestattet Outlook die Einrichtung von beliebig verschachtelten Ordnern und Unterordnern. Um die Analogie weiter zu treiben: Gibt es unter Windows verschiedene Laufwerke, so kann es unter Outlook auch mehrere PST-Dateien geben, die in die Anwendung eingeklinkt wurden und die dann jeweils die oberste Ebene der Ordnerstruktur einnehmen. Unterhalb dieser finden die eigentlichen Verzeichnisse ihren Platz.

Der Zugriff auf die Ordner geschieht über die Folders-Auflistung des Namespace MAPI. Sie kann komfortabel in einer For-Each-Schleife enumeriert werden:

Dim objFolder As Outlook.Folder
For Each objFolder in objNS.Folders
     Debug.Print objFolder.Name
Next objFolder

Als Ergebnis erhalten Sie hier einen Liste der verwendeten PST-Dateien über deren Ordnernamen.

Jeder Folder enthält seinerseits eine Folders-Auflistung für die möglichen Unterordner:

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