Kundenkommunikation per E-Mail verwalten, Teil 1

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 Abb. 1 aus.

pic002.png

Abb. 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 Listing 1 ausführt. Diese erstellt ein Application-Objekt für den Zugriff auf Outlook, ein Namespace-Objekt und schließlich ein Folder-Objekt. Das Namespace-Objekt stellt die Methode PickFolder bereit, die den Dialog aus Abb. 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

pic001.png

Abb. 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 Abb. 3 aussieht.

pic003.png

Abb. 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

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar