Wenn Sie den E-Mail-Verkehr mit Ihren Kunden im Griff haben wollen, kopieren Sie einfach alle betroffenen E-Mails in Ihre Kundendatenbank. Dort landen diese in einer Tabelle, deren Datensätze Sie den Kunden zuordnen können. Vor dem Zuordnen müssen Sie jedoch noch festlegen, welche E-Mails aus welchen Ordnern importiert werden sollen. Dieser Beitrag zeigt, wie Sie den Zugriff auf Outlook und den Import der E-Mails automatisieren.
Bevor Sie eine E-Mail überhaupt einem Kunden in Ihrer Datenbank zuordnen können, müssen Sie diese erstmal lesen und gegebenenfalls die wichtigsten Daten der E-Mail in der Datenbank speichern.
Dies erledigen Sie mit den in diesem Beitrag vorgestellten Techniken. Dabei sind folgende Schritte nötig:
- Definieren der Ordner, deren E-Mails eingelesen werden sollen, und festlegen, welche davon Ausgangs- und welche Eingangsordner sind
- Angabe der eigenen E-Mail-Adressen, um nur gezielt adressierte E-Mails zu importieren
- Angabe der E-Mail-Adressen der Kunden, deren E-Mails berücksichtigt werden sollen
- Markieren der importierten E-Mails in Outlook, damit diese als eingelesen erkannt und nicht nochmals eingelesen werden
- Zuordnen der eingelesenen E-Mails zu den Kunden in der Kundentabelle
- Aufbauen einer hierarchischen Struktur aus E-Mails und den passenden Antworten
- Anzeige dieser E-Mail-Hierarchie im TreeView-Steuerelement
Eingangs- und Ausgangsordner festlegen
Der erste Schritt dient dazu, die zu berücksichtigenden Ordner von Outlook zu ermitteln. Normalerweise verwendet man nur einen Posteingang und einen Ordner, in dem die gesendeten Objekte landen.
Gegebenenfalls haben Sie aber mehrere E-Mail-Adressen eingerichtet oder filtern E-Mails gleich nach dem Eingang oder Ausgang mit entsprechenden Regeln in andere Ordner. Daher erstellen wir gleich zu Beginn eine Tabelle, welche die zu durchsuchenden Ordner speichert, und zwei Formulare, mit denen Sie die gewünschten Outlook-Ordner festlegen können – ein einfaches und eines mit der Darstellung der zu prüfenden Ordner als TreeView.
Die Tabelle heißt tblMailordner und enthält die folgenden drei Felder:
- MailordnerID: Primärschlüsselfeld
- Mailordner: Pfad des Ordners
Mit einigen Werten sieht diese Tabelle etwa wie in Bild 1 aus.
Bild 1: Tabelle zum Speichern der Outlook-Ordner
Ordner ermitteln
Wie füllen Sie diese Tabelle nun mit den Outlook-Ordnern Die einfachste Methode ist, einfach den zur Auswahl von Outlook-Ordnern vorgesehenen Dialog zu verwenden. Nehmen wir an, Sie verwenden ein Formular namens frmMailordner, das die in der Tabelle tblMailordner enthaltenen Datensätze in einem Listenfeld namens lstMailordner anzeigt. Dann können Sie diesem Formular eine Schaltfläche namens cmdHinzufuegen zuweisen, welche die Ereignisprozedur aus Bild 2 öffnet.
Listing 1: Hinzufügen eines Mailordners zur Tabelle tblMailordner
Private Sub cmdHinzufuegen_Click() Dim objOutlook As Outlook.Application Dim objNamespace As Outlook.NameSpace Dim objFolder As Outlook.Folder Dim db As DAO.Database Set db = CurrentDb Set objOutlook = New Outlook.Application Set objNamespace = objOutlook.GetNamespace("MAPI") Set objFolder = objNamespace.PickFolder If Not objFolder Is Nothing Then db.Execute "INSERT INTO tblMailordner(Mailordner) VALUES(''" _ & objFolder.FolderPath & "'')", dbFailOnError Me!lstMailordner.Requery End If End Sub
Bild 2: Auswahl von Outlook-Ordnern mit dem dafür vorgesehenen Dialog
Damit wählen Sie einen der Ordner aus und klicken dann auf die Schaltfläche OK. Die Prozedur prüft, ob ein Ordner ausgewählt wurde, und schreibt dann den Wert der Eigenschaft FolderPath in die Tabelle tblMailordner. Die dortigen Ordner werden unmittelbar nach dem Hinzufügen im Listenfeld angezeigt.
Dies ist die einfache Variante und verdeutlicht die grundlegende Technik. Für etwas mehr Komfort möchten Sie aber vielleicht direkt die Struktur der Outlook-Ordner in einem TreeView innerhalb der Datenbank abbilden und dort mit geeigneten Kontrollkästchen die zu berücksichtigenden Ordner markieren.
Outlook-Ordner-Baum
Dazu legen Sie zunächst ein neues Formular namens frmMailordnerTree an und fügen diesem ein TreeView-Steuerelement hinzu. Nennen Sie das Steuerelement ctlMailordner und fügen Sie dem Formular eine Ereignisprozedur für das Ereignis Beim Laden hinzu.
Diese Prozedur setzt die grundlegenden Einstellungen des TreeView-Steuerelements und ruft die Prozedur zum Füllen auf. Im Formularmodul benötigen Sie auf jeden Fall eine Objektvariable für das TreeView-Steuerelement, das mit dem Schlüsselwort WithEvents ausgestattet wird, damit Sie auch auf dessen Ereignisse reagieren können:
Dim WithEvents objMailordner As MSComctlLib.TreeView
Die Prozedur, die beim Laden des Formulars ausgelöst wird, finden Sie in Listing 2. Sie weist zunächst der Objektvariablen objMailordner einen Verweis auf das TreeView-Steuerelement zu.
Listing 2: Ereignisprozedur beim Laden des Formulars
Private Sub Form_Load() Set objMailordner = Me!ctlMailordner.Object With objMailordner .Checkboxes = True .Font.name = "Calibri" .Font.Size = 9 .LineStyle = tvwRootLines End With MailordnerEinlesen End Sub
Danach stellt sie einige Eigenschaften für das TreeView-Steuerelement ein, was eine Einstellung über den Eigenschaften-Dialog dieses Steuerelements erübrigt. Dabei werden die Kontrollkästchen aktiviert, die Schriftart angepasst und die Root-Linien für die Root-Elemente eingeblendet. Die letzte Anweisung ruft die Prozedur MailordnerEinlesen auf, nach deren Abarbeitung das Formular wie in Bild 3 aussieht.
Bild 3: Outlook-Ordner per TreeView auswählen
Diese Prozedur finden Sie in Listing 3. Für die Execute-Anweisung gleich zu Beginn, die den Wert eines Feldes namens Aktiv der Tabelle tblMailordner auf False einstellt, sind einige erklärende Worte nötig: Das TreeView-Steuerelement soll alle Outlook-Ordner, die standardmäßig Mail-Elemente enthalten, hierarchisch auflisten.
Listing 3: Einlesen der Mailordner und Anhaken der bereits in der Tabelle tblMailordner eingetragenen Ordner
Public Sub MailordnerEinlesen() Dim objOutlook As Outlook.Application Dim objNamespace As Outlook.NameSpace Dim objFolder As Outlook.Folder Dim objNode As MSComctlLib.Node Dim db As DAO.Database Dim rstMailordner As DAO.Recordset Set db = CurrentDb db.Execute "UPDATE tblMailordner SET Aktiv = FALSE", dbFailOnError Set objOutlook = New Outlook.Application Set objNamespace = objOutlook.GetNamespace("MAPI") objMailordner.Nodes.Clear Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox) Set objNode = NodeAnlegen(db, objFolder, "") MailordnerEinlesen_Rek db, objFolder, objNode Set objFolder = objNamespace.GetDefaultFolder(olFolderSentMail) Set objNode = NodeAnlegen(db, objFolder, "") MailordnerEinlesen_Rek db, objFolder, objNode Set rstMailordner = db.OpenRecordset("SELECT * FROM tblMailordner WHERE Aktiv = FALSE", _ dbOpenDynaset) Do While Not rstMailordner.EOF If MsgBox("Der Mailordner ''" & rstMailordner!Mailordner _ & "'' ist nicht mehr in Outlook vorhanden." & vbCrLf & vbCrLf _ & "Ordner auch aus der Datenbank entfernen", vbYesNo + vbExclamation, _ "Fehlender Mailordner") = vbYes Then db.Execute "DELETE FROM tblMailordner WHERE MailordnerID = " _ & rstMailordner!MailordnerID, dbFailOnError End If rstMailordner.MoveNext Loop End Sub