Outlook: Mails

Zusammenfassung

Sie erfahren, wie Sie mit VBA und Outlook E-Mails von Access aus versenden können.

Techniken

Access, VBA, Formulare, Outlook

Voraussetzungen

Access 2000 oder höher, Outlook 2000 oder höher

Beispieldateien

AccessUndOutlook2000.mdb (ab Access 2000)

André Minhorst, Duisburg

Dieser und die folgenden Beiträge zeigen einige Möglichkeiten, um von Access aus Outlook per VBA fernzusteuern und E-Mails zu versenden, anzuzeigen oder zu löschen. In diesem Beitrag starten Sie mit den wichtigsten Voraussetzungen und dem Versenden von E-Mails.

Voraussetzungen

In den folgenden Kapiteln werden Sie des öfteren per VBA-Code auf Outlook zugreifen. Dazu ist es natürlich notwendig, dass sich Outlook überhaupt auf dem Rechner befindet.

Außerdem benötigen Sie einen Verweis auf die Bibliothek Microsoft Outlook 11.0 Object Library. Diesen wählen Sie über den Dialog Verweise der VBA-Entwicklungsumgebung aus. Den Dialog öffnen Sie über den Menüeintrag Extras/Verweise.

E-Mails versenden

Das direkte Versenden von E-Mails aus einer Access-Anwendung heraus, ohne Outlook öffnen zu müssen, ist eine komfortable Geschichte – erst recht, wenn die Mail anschließend wie bei einer auf herkömmlichem Wege versendeten E-Mail im entsprechenden Outlook-Ordner landet.

Mit dem nachfolgend vorgestellten Quellcode öffnen Sie mit dem Formular aus Bild 1 den Outlook-Dialog zur Anzeige einer E-Mail und füllen die wichtigsten Felder der E-Mail automatisch aus (siehe Bild 2).

Bild 1: Beispielformular zum Aufrufen des Outlookschen E-Mail-Dialogs

Bild 2: Von Outlook bereitgestellter Dialog zum Versenden einer E-Mail

Das Formular ist als Beispiel bewusst einfach gehalten – es ist nicht an eine Tabelle gebunden und enthält nur die wichtigsten Informationen zum Versenden einer E-Mail.

Der interessanteste Teil des Formulars ist die Funktionalität der Schaltfläche cmdMailErstellen. Sie ruft die Prozedur aus Quellcode 1 auf.

Zum Fernsteuern von Outlook bedarf es dort gar nicht viel: Sie benötigen zwei Objektvariablen, um eine Outlook-Instanz und das zu erstellende Mail-Objekt zu referenzieren, und einige Eigenschaften und Methoden des Outlook-Objektmodells.

Quellcode 1: Anzeigen und füllen des E-Mail-Dialogs von Outlook

Private Sub cmdMailErstellen_Click()
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    Set objOutlook = New Outlook.Application
    Set objMail = objOutlook.CreateItem(olMailItem)
    With objMail
        .To = Nz(Me.txtEMail, "")
        .Subject = Nz(Me.txtBetreff, "")
        .Body = Nz(Me.txtInhalt, "")
        .Display True
    End With
    objOutlook.Quit
    Set objOutlook = Nothing
End Sub

Quellcode 2: Anlegen einer benutzerdefinierten Eigenschaft und suchen nach einer Mail mit dieser Eigenschaft im Ordner “Gesendete Objekte”

''Anlegen einer benutzerdefinierten Eigenschaft
objMail.ItemProperties.Add _    "BenutzerdefinierteEigenschaft", olText
objMail.ItemProperties("BenutzerdefinierteEigenschaft").Value _    = "Wert"
''Suchen nach einer E-Mail mit dieser benutzerdefinierten 
''Eigenschaft
For Each objMail In objFolder.Items
    On Error Resume Next
    If objMail.ItemProperties("BenutzerdefinierteEigenschaft") _        = "Wert") Then
        Debug.Print objMail.EntryID
        Exit For
    End If
    On Error GoTo 0
Next objMail

Das Mail-Objekt bietet Eigenschaften wie To, Subject oder Body, die Sie mit den Informationen aus dem Formular füllen können, und Methoden wie Display, die zur Anzeige des E-Mail-Dialogs führen.

Letztere bietet einen Parameter namens Modal, mit dem Sie angeben können, ob der Dialog modal geöffnet werden soll – dadurch wird der Ablauf der aufrufenden Prozedur unterbrochen, bis der Dialog wieder geschlossen wird.

Den Aufruf des Dialogs kann man sich natürlich auch sparen – zumindest wenn ohnehin schon alle wichtigen Informationen vorliegen. In diesem Fall verwendet man einfach die Methode Send des Mail-Objekts, um die E-Mail direkt abzusenden.

Auf EntryID gesendeter E-Mails zugreifen

Das eindeutige Merkmal einer E-Mail in Outlook ist ihre EntryID. Dabei handelt es sich um eine Kombination aus Zahlen und Buchstaben, die nur einen Nachteil hat: Sie ändert sich, wenn eine E-Mail den Outlook-Ordner wechselt.

Und da eine E-Mail nach dem Absenden zunächst in den Postausgang wandert und erst mit der nächsten Auslieferung in den Ordner Gesendete Objekte, ist es nicht so einfach, eine E-Mail via VBA und Outlook zu versenden und direkt die EntryID zu ermitteln, um das erneute Anzeigen dieser E-Mail zu ermöglichen.

Das Hauptproblem ist, dass man nicht sicher sein kann, dass die E-Mail auch direkt versendet wird – der Zeitpunkt, an dem sie in den Ordner Gesendete Objekte gelangt, ist also nicht exakt festzulegen.

Sie lernen zwar im folgenden Beitrag E-Mails aus Outlook auswählen, wie Sie eine E-Mail aus einem Outlook-Ordner herausfischen können, aber dies sollte schon automatisiert geschehen.

Dafür gibt es mehrere Möglichkeiten: Entweder Sie suchen eine Weile nach dem Versenden nach einer Mail, deren Subject und CreationTime

mit in der Datenbank gespeicherten Werten übereinstimmen, oder Sie legen für die gesendete E-Mail eine benutzerdefinierte Eigenschaft an, die Sie mit einem eindeutigen Wert belegen, und suchen anschließend nach diesem Wert. Das Hinzufügen und Festlegen einer solchen Eigenschaft sieht wie in Quellcode 2 aus.

Zusammenfassung

Sie erfahren, wie Sie mit VBA und Outlook die EntryID einer E-Mail von Access aus ermitteln und speichern können, um den späteren Zugriff auf diese E-Mail zu ermöglichen.

Techniken

Access, VBA, Listenfelder, temporäre Tabellen, Outlook

Voraussetzungen

Access 2000 oder höher, Outlook 2000 oder höher

Beispieldateien

AccessUndOutlook2000.mdb

André Minhorst, Duisburg

Im Beitrag “E-Mails versenden mit VBA und Outlook” haben Sie erfahren, wie Sie von Access aus E-Mails versenden und deren EntryID ermitteln können, um später auf diese zuzugreifen. Letzteres macht natürlich auch für bestehende E-Mails Sinn: Vielleicht versenden Sie einmal eine E-Mail und möchten Sie später im CRM einem bestimmten Kunden zuweisen. Wie Sie die EntryID von E-Mails herausfinden, erfahren Sie in diesem Beitrag.

Wer Mails via Outlook verschickt, möchte vielleicht auch später einmal von Access aus auf diese zugreifen. Die erste hier vorgestellte Möglichkeit erfordert zuvor das Auswählen der gewünschten E-Mail und zeigt diese erst dann an.

Für die Auswahl einer E-Mail sind zwei Dialoge erforderlich: Mit dem ersten legt man den Outlook-Ordner fest, aus dem die auszuwählende E-Mail stammt (siehe Bild 1).

Der zweite zeigt schließlich die in dem Ordner enthaltenen E-Mails an (siehe Bild 2). Mit der auf diese Weise ausgewählten E-Mail kann man anschließend jede Menge Dinge erledigen – dazu aber später mehr.

Bild 1: Auswählen eines Outlook-Ordners

Bild 2: Anzeige der in einem Ordner enthaltenen E-Mails

Formular zum Anzeigen von E-Mails

Bevor es an den Quellcode geht, legen Sie das Gerüst in Form des Formulars frmMailAuswaehlen an.

Bild 3: Daten der temporären Tabelle tblMailsTemp

Das Formular enthält ein Listenfeld zur Anzeige der Mails, ein Textfeld zur Anzeige des Ordners, in dem sich die E-Mails befinden, und eine Schaltfläche zum Auswählen eines anderen Ordners.

Des Weiteren dienen die zwei Schaltflächen cmdAuswaehlen und cmdAbbrechen zum Schließen des Formulars – den Unterschied zwischen den beiden erfahren Sie später.

Das Listenfeld bezieht seine Daten aus einer temporären Tabelle, die nur zum Zwischenspeichern der angezeigten E-Mail-Daten dient. Da diese Tabelle erst beim öffnen des Formulars erstellt wird, dürfen Sie die Eigenschaft Datensatzherkunft noch nicht auf diese Tabelle einstellen – anderenfalls würde dies beim öffnen einen Fehler auslösen.

Sie können das Listenfeld aber dennoch schon auf die anzuzeigenden Daten vorbereiten. Bild 3 zeigt, wie die Daten der Tabelle aussehen. Das erste Feld ist der Primärindex der Tabelle, das zweite enthält die EntryID als eindeutiges Merkmal jeder E-Mail.

Die übrigen Felder soll das Listenfeld anzeigen. Dazu stellen Sie die Eigenschaften Spaltenanzahl und Spaltenbreiten auf die Werte 5 und 0cm;0cm;3,2cm;6cm ein.

Das Listenfeld blendet dann die ersten beiden Felder aus und zeigt die übrigen in entsprechender Breite an.

Funktionalität des Formulars

Die verwendete Technik benötigt einige Zeilen Code. Zunächst soll vor dem Anzeigen des Formulars zum Auswählen der E-Mails der Dialog mit den Ordnern angezeigt werden.

Um die Lösung modular zu halten – es soll die komplette Funktionalität in einem Formular und dessen Klassenmodul beherbergt sein -, erfolgt auch der Aufruf dieses Dialogs vom Formular aus.

Der beste Zeitpunkt hierfür ist jener, an dem das Formular noch nicht angezeigt wird – ein passender Kandidat ist das Ereignis Beim öffnen.

Quellcode 2 zeigt die entsprechende Ereignisprozedur, die nicht nur den Dialog aufruft, sondern anschließend direkt die enthaltenen Mails ausliest und verarbeitet. Außerdem enthält Quellcode 1 die Deklaration der Objektvariablen für Outlook, den Namespace und den Mailfolder sowie eine Datenbankverbindung.

Diese sollen modulweit gültig sein, da mehrere Routinen auf die Objekte zugreifen und diese nicht jedes Mal neu erzeugt werden sollen.

Die Prozedur Form_Open erzeugt zunächst die benötigten Objekte. Anschließend tritt direkt der Dialog zum Auswählen von Mailordnern in Aktion. Mit der Funktion ChooseFolder weist die Prozedur der Variablen objFolder den im Dialog ausgewählten Ordner zu.

Die Funktion ChooseFolder ist in Quellcode 2 zu begutachten. Sie verwendet die PickFolder-Methode des Namespace-Objekts, um den Dialog aus Abb. anzuzeigen, und gibt anschließend den ausgewählten Ordner zurück. Dessen Name wird dann im Textfeld txtOutlookordner angezeigt.

Damit ist der erste Schritt getan, der leider der einfachere war. Nun müssen die in dem Ordner enthaltenen Mails im Listenfeld lstMails des Formulars frmMailAuswaehlen angezeigt werden.

Quellcode 1: Deklaration formularweiter Variablen und das Beim öffnen-Ereignis

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar