OLConnector Programmierung PDF Drucken E-Mail

Das Vorgehen, um Outlook zu automatisieren, unterscheidet sich mit dem OLConnector nur geringfügig vom üblicherweise dafür eingesetzten. Um irgendwelche Aktionen ausführen zu können, benötigt man die laufende Instanz von Outlook und Zugriff auf dessen Application-Objekt. Es gibt zwei Möglichkeiten unter VBA:

  • Einen Verweis auf die "Microsoft Outlook Library x.0" anlegen und das Application-Objekt so erzeugen:
    Set objOutlook = New Outlook.Application . Hier handelt es sich um so genanntes Early Binding
  • Das Application-Objekt direkt über die so genannte ProgID - das ist die Klassenbezeichnung eines Objekts - erzeugen. Das wäre:
    Set objOutlook = CreateObjekt("Outlook.Application"). Hier handelt es sich um Late Binding.

Die letztere Variante ist grundsätzlich zu bevorzugen. Wenn Outlook etwa auf dem Zielsystem gar nicht installiert ist oder in einer anderen Version vorliegt, so bekommt man Probleme mit dem VBA-Verweis, der dann als "NICHT VORHANDEN" markiert sein wird, und das gesamte VBA-Projekt kann möglicherweise nicht mehr ausgeführt werden. Im Folgenden deshalb ausschließlich die Darstellung der zweiten Methode. Eine Prozedur zur Automation sieht nun so aus:

Sub OhneConnector()
   Dim objOL As Object 'Variable für das Outlook.Application-Objekt
On Error Resume Next
   Set objOL = CreateObject("Outlook.Application")

Hier wird die Application-Variable instanziert. Zu bemerken ist hier, dass es egal ist, ob Outlook bereits geöffnet ist oder nicht. Da Outlook eine so genannte Multi-Use-Anwendung ist, gibt CreateObject eine bereits laufende Outlook-Instanz zurück und erzeugt nicht eine neue. Es verhält sich also faktisch genauso wie GetObject( , "Outlook.Application").

If objOL Is Nothing Then
    MsgBox "Instanz von MSOutlook konnte nicht erhalten werden." & vbCrLf & _
           "Ist Outlook korrekt installiert?", vbExclamation
    Exit Sub
End If

In diesem Teil wird geschaut, ob die Application-Variable auch gefüllt ist. Falls Outlook auf dem System nicht installiert ist, dann ist die Variable leer, was durch den Test auf  objOL Is Nothing ermittelt wird. In diesem Fall erfolgt eine benutzerdefinierte Meldung und die Prozedur wird verlassen. Andernfalls kann ab hier mit weiterem Code fortgefahren werden, der beliebige Aufgaben auf das Outlook.Application-Objekt (objOL) ausführt wie z.B. das Auslesen von Kontakten (ContactItems), das Exportieren und Senden von Emails (MailItems) oder das Anlegen von Aufgaben (TaskItems). Davor setzen wir aber noch eine Fehlerbehandlung ein, denn eingangs der Prozedur hatten wir sie mit der Zeile On Error Resume Next außer Kraft gesetzt:

On Error Goto Fehlerbehandlung
    ...
Fehlerbehandlung:
    Msgbox "Fehler Nummer " & Err.Number & _
vbCrLf & Err.Description,   vbExclamation

Das mit gutem Grund: Wird Outlook nach vorstehendem Code automatisiert, dann wird die Sicherheitsabfrage von Outlook erscheinen, die bestätigt werden muss - meist nach der zweiten Aktion, etwa der zweiten exportierten Email - Outlook scheint gutmütigerweise nur eine einzige Email durchgehen zu lassen, ohne dass der Sicherheitsdialog erscheint. Wird die Sicherheitsabfrage nicht bestätigt, sondern stattdessen die Abbrechen-Schaltfläche geklickt, so wird dies im Code oben zu einem Fehler führen, der die Nummer 287 hat. Dieser Fehler wird in der Fehlerbehandlung abgefangen.

Wird der OLConnector eingesetzt, dann ist das ganze Verfahren im Prinzip dasselbe, nur dass hier die Instanzierung der Application-Variable anders aussieht:

Sub MitConnector()
    Dim objOL As Object
    Dim objConnect As Object
On Error Resume Next
    Set objOL = CreateObject("Outlook.Application")
    If objOL Is Nothing Then
        MsgBox "Instanz von MSOutlook konnte nicht erhalten werden." & vbCrLf & _
               "Ist Outlook korrekt installiert?", vbExclamation
        Exit Sub
    End If

Bis hierhin ist der Code derselbe wie im ersten Beispiel. Nun kommt der OLConnector ins Spiel:

Set objConnect = GetObject(, "OLConnector.Connect")

Wenn der OLConnector als COM-Addin in Outlook geladen wurde, was automatisch der Fall sein sollte, wenn er im System korrekt installiert, also registriert wurde, dann steht die Objektvariable objConnect nun auf dem Connect-Objekt des OLConnector. Das wird im Folgenden aber erst noch geprüft:

If objConnect Is Nothing Then
    Set objOL = Nothing
    MsgBox "Konnte keine Verbindung zum OLConnector herstellen." & vbCrLf & _
           "Ist das COM-Addin OLConnector registriert" & _
" und wird es von Outlook geladen?", vbExclamation
    Exit Sub
End If

Wenn der OLConnector etwa nicht registriert und folglich auch nicht von Outlook geladen wurde, dann ist die Variable objConnect leer; mit dem Test auf Nothing wird das getestet und in diesem Fall eine entsprechend angepasste Fehlermeldung ausgegeben. Ansonsten läuft alles nach Plan und jetzt kommt der Clou der ganzen Sache:

Set objOL = objConnect.olApplication

Hier wird die bisher auf das Outlook.Application-Objekt stehende Variable objOL auf die wichtige Eigenschaft OLApplication des OLConnector gesetzt. Die enthält zwar genau dasselbe Outlook.Application-Objekt, doch erscheint der Sicherheitsdialog anschließend nicht, weil dieses Application-Objekt nun "von außen" und nicht direkt angesprochen wird. Der weitere Code führt dann, genau wie im ersten Beispiel oben, die eigentlichen Aufgaben durch.


Neu in V.1.1
Der Einsatz des OLConnector führt natürlich zu einem gewissen Sicherheitsrisiko: Jede Anwendung kann nun nach beschriebenen Verfahren mit seiner Hilfe Outlook automatisieren, ohne dass die Sicherheitsabfrage erscheint. Damit ist das Versenden von Massenmails und Zugriff auf die Kontakte im Stillen möglich. Aus diesem Grund wurde die Möglichkeit implementiert, das Outlook-Application-Objekt erst nach Angabe eines Passworts zu erhalten.

objConnect.Password = "Sascha Trowitzsch"
Set objOL = objConnect.olApplication

Ist der Passwort-Modus des OLConnector eingeschaltet, dann würde im vorstehenden Code die Objektvariable objOL ungültig sein (Nothing), falls das übergebene Passwort inkorrekt ist oder die entsprechende Zeile weggelassen würde. Somit ist es nur einer Anwendung, die dieses Passwort kennt, möglich, auf Outlook mit dem OLConnector zuzugreifen. Das Passwort kann in V.1.1 in den Optionen von Outlook eingegeben werden. Ist der OLConnector geladen, dann sieht der Optionen-Dialog (Menü Extras | Optionen...) so aus:

OLConnector im Optionen-Dialog in Outlook

Es gibt hier eine neue Registerseite "OLConnector". Im entsprechenden Feld kann darin das Passwort eingegeben werden und mit "Übernehmen" oder "OK" gespeichert werden. Die Passwortabfrage tritt dabei nur in Kraft, wenn auch das Häkchen auf "Use Password" gesetzt wurde. Ist das Häkchen deaktiviert, dann ist die Codezeile mit der Passwortübergabe irrelevant.
Das Passwort wird übrigens RC4-verschlüsselt in der Registry unter dem Zweig HKEY_CURRENT_USER abgelegt und gilt damit nur für den aktuellen Benutzer des Computers. Sollen also mehrere User den OLConnector im Passwort-Modus verwenden können, so muss für jeden einzelnen das Passwort in Outlook eingegeben werden. Dies wurde aus Sicherheitsgründen explizit so implementiert.

Zum Schluss nochmals der ausdrückliche Hinweis, dass es aus technischen Gründen nicht möglich ist, den OLConnector auch unter Outlook XP (2002) einzusetzen!

 

 

Ihren Kommentar hinzufügen

Ihr Name:
Betreff:
Kommentar:
  Bild, welches den Sicherheitscode enthält
Sicherheitscode: