Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

E-Mails in Access sichern

Dieser Beitrag zeigt, wie Sie E-Mails aus Outlook in Access-Tabellen sichern können. Standardmäßig werden alle E-Mails sowie Daten aus Outlook in der Datei Outlook.pst gespeichert. Diese Datei wächst dabei täglich an, was sich irgendwann auch zwangsläufig in der Performance Ihres Systems auswirkt. Jetzt wird gezeigt, wie E-Mails aus Outlook in eine Access-Datenbank transferiert werden können, um damit eine "zweite" Sicherung der E-Mails auf anderem Medium herzustellen.

Buchtipp

Dieser Beitrag stammt aus der Feder von Bernd Held, Buchautor und Microsoft-MVP. Sein aktuelles Buch mit vielen weiteren Codebeispielen für alle Gelegenheiten finden Sie hier.

Die Zieltabelle

Um die E-Mail-Daten aus Outlook in eine Access-Tabelle zu übertragen, muss zuerst eine Tabelle mit folgenden Feldern anlegt und unter dem Namen EingangMails gespeichert werden:

ID (AutoWert)
Titel (Text)
Empfänger (Memo)
Mailer (Text)
Inhalt (Memo)
Datum (Datum/Uhrzeit)
Größe (Zahl)

Da der Felddatentyp Text auf 255 Zeichen begrenzt ist, wird beim Feld Empfänger sowie beim eigentlichen E-Mail-Inhalt der Felddatentyp Memo verwendet, der immerhin 65536 Zeichen als maximale Kapazität zur Verfügung bereitstellt. Gerade, wenn eine E-Mail an mehrere Empfänger geht, dann ist oft die Felddefinition Text zu klein, geschweige denn, wenn der Inhalt eines E-Mails gespeichert werden soll. Beim Feld Inhalt dürfte die Kapazitätsgrenze des Feldatentyps Memo daher in den allermeisten Fällen ausreichen.

Verweise setzen

Als nächste Aufgabe muss die Vorbereitung der Entwicklungsumgebung von Access auf den Transfer vorbereitet werden. Dieser Transfer wird über den Einsatz von VBA-Makros realisiert, dabei müssen einige Objektbibliotheken eingebunden werden. Diese Objektbibliotheken (Microsoft Outlook und DAO) stellen die dazu benötigten VBA-Befehle zur Verfügung. Dazu wechseln Sie in die Entwicklungsumgebung von Access, indem Sie die Tastenkombination Alt + F11 drücken. Wählen Sie aus dem Menü Extras den Befehl Verweise und aktivieren Sie die Bibliothek Microsoft Outlook 9.0 Object Library (Office 2000), Microsoft Outlook 10.0 Object Library (Office XP), beziehungsweise Microsoft Outlook 11.0 Object Library (Office 2003). Aktivieren Sie zusätzlich die Bibliothek Microsoft DAO 3.6 Object Library.

Import per VBA

Fügen Sie nun in der Entwicklungsumgebung von Access ein neues Modul ein (Menü Einfügen/Modul) und erfassen die folgende Prozedur:

Sub EingangsMailsAusOutlookÜbernehmen()

    On Error Goto EingangsMailsAusOutlookÜbernehmen_Err

    Dim OutlN As New Outlook.Application

    Dim Eingangsbox As Object

    Dim objKon As Object

    Dim DBS As Recordset

    Dim Conn As Database

    Dim IntMailZ As Integer

    Set Conn = CurrentDb

    Set DBS = Conn.OpenRecordset("EingangMails", dbOpenDynaset)

    IntMailZ = 0

    Set Eingangsbox = OutlN.GetNamespace ("MAPI"). _

        GetDefaultFolder (olFolderInbox)

    For IntMailZ = 1 To Eingangsbox.Items.Count

        Set objKon = Eingangsbox.Items(IntMailZ)

        With objKon

            DBS.AddNew

            DBS!Titel = .Subject

            DBS!Empfänger = .To

            DBS!Mailer = .SenderName

            DBS!Datum = .CreationTime

            'oder:

            'DBS!Datum = Format(.ReceivedTime, "DD.MM.YYYY hh:mm")

            DBS!Größe = .Size

            DBS!Inhalt = .Body

        End With

        DBS.Update

    Next IntMailZ

    MsgBox "Datentransfer erfolgreich beendet! " & vbLf & _

        "Es wurden " & IntMailZ & " Sätze angelegt!", vbInformation

EingangsMailsAusOutlookÜbernehmen_Exit:

    DBS.Close

    Set objKon = Nothing

    Set OutlN = Nothing

    Exit Sub

EingangsMailsAusOutlookÜbernehmen_Err:

    MsgBox "Es ist ein Fehler aufgetreten!"

    Goto EingangsMailsAusOutlookÜbernehmen_Exit

End Sub

Zu Beginn des Makros werden die benötigten Variablen deklariert. Danach wird über die Methode CurrentDb dafür gesorgt, dass auf die aktuelle Datenbank verwiesen wird. Über die Methode OpenRecordSet wird die Tabelle EingangMails geöffnet. Die Zählvariable IntMailZ wird vor dem Beginn der Schleife auf den Wert 0 gesetzt. Die Datenquelle MAPI wird danach über die Methode GetNameSpace festgelegt. Der Standardordner kann über die Methode GetDefaultFolder adressiert werden. Dabei wird ein Verweis auf den Posteingangsordner gesetzt, der über die Konstante olFolderInbox identifiziert wird. Die anschließende Schleife arbeitet alle E-Mails im Posteingangsordner ab. Dabei wird über die Eigenschaft Count, welches auf das Auflistungsobjekt Items angewendet wird, die Gesamtzahl der dort enthaltenen E-Mails abgefragt. Innerhalb der Schleife wird ein Objekt über die Anweisung Set erstellt. Die Methode AddNew legt dieses noch leere Objekt in der Access-Tabelle an, welches danach gefüllt wird. Über die Eigenschaft Subject wird dem Datenfeld Titel der Titel der E-Mail zugewiesen. Mithilfe der Eigenschaft To kann man den beziehungsweise die Empfänger der jeweiligen E-Mail auslesen. Sind mehrere Empfänger in der E-Mail angeben, so werden diese durch das Semikolon (;) voneinander getrennt ausgegeben. Die Eigenschaft SenderName gibt Auskunft über die Person, die die E-Mail versendet hat. Über die Eigenschaft CreationDate können Sie das Erstellungsdatum einer E-Mail feststellen.  Die Größe einer E-Mail-Nachricht kann über die Eigenschaft Size abgefragt werden. Dabei wird die Einheit in Bytes ausgegeben. Der eigentliche Inhalt der E-Mail wird über die Eigenschaft Body ermittelt. Weisen Sie diesen Inhalt dem Datenbankfeld Inhalt zu, dass Sie vorher in der richtigen Größe (Datenbankfeld Memo) angelegt haben. Am Ende der Schleife darf nicht vergessen werden die Methode Update einzusetzen. Erst dann wird der neue Datensatz in der Tabelle gespeichert. Über die Methode Close wird die Datentabelle anschließend geschlossen.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.