Mails per Drag and Drop in der Datenbank speichern

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Mails per Drag and Drop in der Datenbank speichern

Mails landen gewöhnlicherweise im Posteingangsordner und werden dann, entweder automatisch oder manuell, in den jeweiligen Zielordner verschoben – wenn sie nicht gar gelöscht werden. Aber kann das schon alles sein? Nein! In diesem Artikel zeigen wir Ihnen, wie Sie beim Verschieben einer Mail in einen bestimmten Ordner weitere Aktionen auslösen können, und zwar per VBA-Ereignis. Auf diese Weise können Sie dann beispielsweise den Inhalt der Mail und gegebenenfalls auch Anlagen direkt in einer dafür vorgesehenen Datenbank speichern.

Welchen Sinn aber soll es haben, den Inhalt von E-Mails in einer Datenbank zu speichern? Sie können auf diese Weise etwa die Mails zu bestimmten Kunden in einer entsprechenden Tabelle ablegen und dem Kunden in der Datenbank zuordnen.

So brauchen Sie von der Kundendatenbank aus nicht immer noch Outlook zu öffnen, um die Kommunikation mit diesem Kunden einzusehen.

Voraussetzungen

Für die nachfolgend vorgestellten Techniken benötigen Sie Microsoft Office mit Outlook und Access in der Version 2007 oder neuer.

Ordner anlegen

Als Erstes wollen wir einen Ordner unter Outlook anlegen, dem Sie die in der Datenbank zu speichernden E-Mails hinzufügen. Diesen können Sie manuell anlegen, wir können dies aber auch per Code erledigen.

Dazu öffnen Sie den VBA-Editor von Outlook (bei geöffnetem Outlook-Fenster mit Alt + F11) und fügen dem bereits vorhandenen Klassenmodul ThisOutlookSession über die beiden Kombinationsfelder im Kopf des Codefensters die Ereignisprozedur Application_Startup hinzu (s. Bild 1). Dieses Ereignis wird bei jedem Start von Outlook ausgelöst.

Anlegen der Ereignisprozedur Application_Startup

Bild 1: Anlegen der Ereignisprozedur Application_Startup

Hier können wir einen Code einfügen, der prüft, ob das gewünschte Verzeichnis sich bereits an Ort und Stelle befindet oder ob es noch angelegt werden soll. Letzteres führt die Prozedur dann gegebenenfalls noch durch.

Um beim Starten von Outlook zu prüfen, ob bereits ein Verzeichnis namens Kundenmails vorhanden ist, und dieses gegebenenfalls anzulegen, fügen Sie der Prozedur Application_Startup noch die Zeilen aus Listing 1 hinzu. Diese Prozedur füllt ein Objekt namens objNamespace mit dem MAPI-Namespace-Objekt von Outlook. Dieses liefert über die GetDefaultFolder-Eigenschaft mit dem Parameter olFolderInbox einen Verweis auf den Posteingangsordner.

Public Sub Application_Startup()
     Dim objInbox As Outlook.Folder
     Dim objKundenmails As Outlook.Folder
     Dim objNamespace As Outlook.NameSpace
     Set objNamespace = Outlook.GetNamespace("MAPI")
     Set objInbox = objNamespace.GetDefaultFolder(olFolderInbox)
     On Error Resume Next
     Set objKundenmails = objInbox.Folders("Kundenmails")
     On Error GoTo 0
     If objKundenmails Is Nothing Then
         Set objKundenmails = objInbox.Folders.Add("Kundenmails")
     End If
End Sub

Listing 1: Prüfen, ob das Verzeichnis Kundenmails schon vorhanden ist

Dann versucht die Prozedur, einen darin enthaltenen Ordner namens Kundenmails mit der Variablen objKundenmails zu referenzieren. Gelingt dies nicht, bleibt objKundenmails leer, was die nachfolgende If...Then-Bedingung prüft.

Ist objKundenmails dann nicht gefüllt, legt die Prozedur diesen Ordner an und trägt einen Verweis auf diesen Ordner in die Variable objKundenmails ein.

Ereignis beim Hinzufügen einer Mail auslösen

Das waren die Vorarbeiten. Tatsächlich müssen wir das Folder-Objekt, mit dem wir das Verzeichnis Posteingang referenzieren, aber außerhalb der Prozedur Application_Startup referenzieren – und zwar mit der folgenden Anweisung:

Dim WithEvents objInbox As  Outlook.Folder

Das Schlüsselwort WithEvents ist nötig, damit wir für die Variable objInbox Ereignisprozeduren im Klassenmodul ThisOutlookSession implementieren können. Dies erledigen Sie nun wiede­rum über die beiden Kombinationsfelder im Kopf des Codefensters. Wählen Sie dort links den nun verfügbaren Eintrag objInbox aus und rechts den Eintrag BeforeItemMove aus, sodass der VBA-Editor die Ereignisprozedur objInbox_BeforeItemMove anlegt (s. Bild 2).

Hinzufügen einer Ereignisprozedur, die beim Verschieben einer Mail ausgelöst wird

Bild 2: Hinzufügen einer Ereignisprozedur, die beim Verschieben einer Mail ausgelöst wird

Hier hinterlegen Sie nun einige weitere Codezeilen, die wie in Listing 2 aussehen. Damit haben wir nun die Basis für weitere Funktionen geschaffen: Wir haben eine Ereignisprozedur, die durch das Verschieben einer E-Mail aus dem Verzeichnis Posteingang ausgelöst wird. Diese Prozedur prüft innerhalb einer Select Case-Bedingung das Zielverzeichnis. Nur wenn dieses den Namen Kundenmails trägt, wird ein Meldungsfenster angezeigt, das über die Übermittlung der Mail in das Verzeichnis Kundenmails informiert.

Private Sub objInbox_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean)
     Select Case MoveTo.Name
         Case "Kundenmails"
             MsgBox "Mail ist angekommen."
     End Select
End Sub

Listing 2: Meldung ausgeben, wenn die Mail in den gewünschten Ordner verschoben wurde

Statt des Meldungsfensters können wir dort nun weitere Anweisungen hinzufügen – etwa, um die Inhalte der E-Mail in der Tabelle einer Datenbank zu speichern.

Tabelle zum Speichern der E-Mails

In einer neuen Datenbankdatei namens Kundenmails.accdb legen wir nun eine neue Tabelle mit der Bezeichnung tblKundenmails an. Diese soll die Felder aus Bild 3 enthalten. Neben dem Primärschlüsselfeld KundenmailID nimmt die Tabelle die grundlegenden Informationen und Inhalte der E-Mail auf – so den Absender, den Empfänger, den Betreff, den Inhalt und das Versanddatum.

Die Tabelle tblKundenmails speichert die grundlegenden Informationen

Bild 3: Die Tabelle tblKundenmails speichert die grundlegenden Informationen

Die Anlagen speichern wir in einer weiteren Tabelle namens tblMailanlagen. Diese finden Sie in Bild 4 vor. Die Tabelle enthält ein Fremdschlüsselfeld namens KundenmailID zum Verknüpfen der Datensätze dieser Tabelle mit denen der Tabelle tblKundenmails. Außerdem speichert die Tabelle den Dateinamen der Anlage im Feld Anlagebezeichnung sowie die Datei selbst im Feld Mailanlage.

Die Tabelle tblMailanlagen speichert die Mailanlagen

Bild 4: Die Tabelle tblMailanlagen speichert die Mailanlagen

Grundsätzlich hätten wir auch einfach nur ein Feld mit dem Datentyp Anlage in der Tabelle tblKundenmails anlegen können. Wir möchten da Anlage-Feld jedoch nicht dazu nutzen, mehrere Dateien zu speichern, da Informationen wie etwa der Dateiname dann nicht so einfach über die Benutzeroberfläche (etwa über Formulare) einsehbar sind.

E-Mails und Anlagen speichern

Listing 3 liefert zunächst zwei Konstanten namens cStrPath und cStrDB, die den Pfad und den Namen der Datenbank enthalten. Sicher gibt es elegantere Möglichkeiten, als Pfad und Dateiname hier fest zu verdrahten, aber aktuell reicht uns diese Variante aus.

Const cStrPath As String = "Z:DokumenteDatenFachmagazineAccessImUnternehmen20146OutlookDrop"
Const cStrDB As String = "Kundenmails.accdb"

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.