mossSOFT OLConnector Drucken

COM-Addin für Microsoft Outlook 2000 ff.
zum Umgehen der Sicherheitsabfrage bei Automation

 

Seit dem Service-Pack 2 von Microsoft Outlook 2000 ist es nicht mehr möglich, über die Automationsschnittstelle Emails in größerer Zahl zu versenden, ohne dass sich ein Sicherheitsdialog öffnet. Werden viele Mails etwa aus einer MSAccess-Datenbank an ein Outlook.Application-Objekt übertragen, dann erscheint ein Meldungsfenster, welches nachfragt, ob der Zugriff erlaubt werden soll - und dies eventuell wiederholt bei jeder neuen Email ("Object Model Guard").
Es gibt keine Möglichkeit, dies auszuschalten - weder per Optionen von Outlook, noch über irgendwelche Registry-Einträge. Als Workaround für VB und VBA haben sich vor allem zwei Methoden eingebürgert, die beide ihre Nachteile haben:

  • ClickYes (http://www.contextmagic.com/express-clickyes ). Dieses kleine Programm sitzt im Tray von Windows, wirkt im Hintergrund und identifiziert das besagte Meldungsfenster von Outlook, wenn es erscheint. Dann simuliert es automatisch einen Tastendruck auf den „Zugriff erlauben“-Button. Das funktioniert soweit, ist aber ziemlich zeitraubend, wenn Serien-Emails versandt werden sollen, weil das Meldungsfenster von Outlook mit einem Timer „gesichert“ ist, der das Klicken des Buttons erst nach einer Zeitspanne von einigen Sekunden erlaubt. Und elegant ist das Ganze sicher auch nicht.
  • Redemption (http://www.dimastr.com/redemption ). Diese ActiveX-DLL kann in die Verweise eines VB(A)-Projekts aufgenommen werden und erlaubt dann das Versenden von Mails über die sogenannte Extended MAPI-Schnittstelle. Das Meldungsfenster erscheint dabei nicht, weil das Application-Objekt von Outlook umgangen wird. Der Vorgang läuft auch schnell ab. Leider ist einiger Lernaufwand erforderlich, um sich mit der Redemption-Schnittstelle und deren Objektmodell vertraut zu machen, zumal die Dokumentation etwas unübersichtlich ist. Und vor allem: es ist nicht ganz billig.

Mit dem OLConnector stellen wir eine alternative Lösung vor, die genannten Nachteile vermeiden soll:
Der OLConnector ist ein COM-Addin für MS Outlook in Version 2000 bis 2007 - unter Outlook XP (2002) funktioniert es leider nicht! - siehe Erläuterung unten. Es besteht aus lediglich einer kleinen ActiveX-DLL, die im System registriert werden muss und dann automatisch resourcenschonend im Hintergrund von Outlook arbeitet. Das Addin-Objekt ist selbst automationsfähig und schleift gegebenenfalls das Application-Objekt von Outlook an andere Anwendungen durch. Der Trick: Da sich das Addin im Prozessraum von Outlook selbst befindet, kommt es nicht zur Anzeige des Meldungsfensters.

Gegenüber dem üblichen Code zum Versand von Emails über VBA ändert sich nur wenig. Unten können zwei kommentierte Code-Beispiele für MSAccess und MSExcel (ab Version 2000) heruntergeladen werden, die die Verwendung der Connector-Schnittstelle verdeutlichen. Zusätzlich steht ein Delphi6-Beispielprojekt zur Automation von Outlook aus einem Delphi-Programm heraus bereit.

Neu in Version 1.1 (April 2006):
Der Einsatz des OLConnector stellt prinzipiell eine neue Sicherheitslücke für Outlook dar. Mit seiner Hilfe war es in Version 1.0. jeder entsprechend programmierten Anwendung möglich, auf Kontakte, Emails usw. von Outlook zuzugreifen. Damit dies verhindert werden kann, ist in Version 1.1 die Eingabe eines Passworts möglich, das von der automatisierenden Anwendung dann im Code angegeben werden muss. Zur genaueren Erläuterung siehe die Ausführungen in der Anleitung zur Programmierung unter VB/VBA.

Die Technik dahinter

Das COM-Addin wird nach Registrierung (> Datei register_connector.bat für jedes Windows-Benutzerkonto ausführen) beim Start von Outlook automatisch geladen und hat damit Zugriff auf dessen Application-Objekt.
Dieses Application-Objekt wird nun indirekt nach außen hin veröffentlicht, wodurch Zugriff auf dessen Funktionen möglich wird. Das Meldungsfenster von Outlook wird dann nicht aufgerufen, weil die entsprechende Sicherungsroutine nur beim direkten Zugriff auf das Application-Objekt über die ROT zum Einsatz kommt. Zumindest gilt dies für die Outlook-Versionen 2000, 2003 und 2007 - Outlook XP (2002) gestattet leider auch COM-Addins keinen Zugriff auf das Objektmodell ohne die Sicherheitsabfrage!
(Anm.: ROT = die Running Objects Table; Teil des OLE-Systems von Windows; über diese ROT können andere Anwendungen Zugriff auf Objekte von OLE-Servern erhalten, was unter VB mit der Methode GetObject geschieht.)
Die Veröffentlichung passiert im Connector mit einer Routine, die das OLConnector-Objekt selbst in der ROT registriert. Dieses kann damit von anderen Anwendungen über GetObject("OLConnector.Connect") ermittelt und anschließend über dessen Eigenschaft OLApplication das durchgeschleifte Outlook.Application-Objekt erhalten werden.

Anleitung zur Programmierung unter VB/VBA...

Anmerkung:

Der mossSOFT OLConnector hat nichts mit dem Microsoft Outlook Connector zu tun! Das ist ebenfalls ein COM-Addin, welches sich in Outlook einbinden lässt, und auch noch den gleichen Dateinamen olconnector.dll aufweist, aber völlig andere Ziele verfolgt. Beide Addins kommen sich jedoch nicht ins Gehege.

 


Download 1 Download OLConnector V.1.3 + Demo für Access und Excel

Download 1 Download OLConnector + Demo für Access 2007

Download 3 Download Delphi 6-Demo

 

Hinweis zum Update 02/2014: Laden Sie sich bei Installationsproblemen nochmals einer der obigen Pakete herunter,entpacken alles in EIN Verzeichnis, und starten Sie danach die COMAddinRegistrator.exe. Das sollte Probleme mit der Registrierung des Addins lösen.
Das Ausführen der Batch-Dateien entfällt damit. Ich supporte das Tool ansonsten nicht weiter. SaschaTrowitzsch
 
Kommentare (4)
Update 02/2014
4 Donnerstag, 13. Februar 2014 um 14:31 Uhr
Sascha Trowitzsch
Die Download-Pakete sind geupdated.
Es gab zahlreiche Meldungen zu Installationsproblemen unter Vista ff.
Bitte eines der Pakete runterladen, die DLL und die comaddinregistrator.exe in EIN Verzeichnis speichern, und Letztere ausführen.
RE: funktioniert das irgendwie auch mit VB.NET?
3 Dienstag, 01. Juni 2010 um 10:48 Uhr
Sascha Trowitzsch
Hab's gerade getestet: In VS2008 eine einfach winForms-Anwendung mit einem Button, der folgenden Code ausführen lässt:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim O As Object
Dim OC As Object

O = CreateObject("Outlook.Application")
OC = GetObject(, "OLConnector.Connect")
MsgBox(TypeName(OC))
O = Nothing
OC.Password = "meinpasswort"
MsgBox(OC.OLApplication Is Nothing)
OC = Nothing
O = Nothing
End Sub

Es klappt wie gewünscht! (Msgbox gibt "False" aus)
Bedenke, dass das Passwort übergeben werden muss, wenn es in den Outlook-Optionen für den mossSOFT Connector eingestellt wurde! Sonst ist die Eigenschaft OLApplication Nothing!

Ciao, Sascha
funktioniert das irgendwie auch mit VB.NET?
2 Montag, 31. Mai 2010 um 10:51 Uhr
Peter Piry
Hallo,

Euere OLConnector klingt ja sehr vielversprechend. Eure Demo funktioniert bei mir auch einwandfrei im Access 2003.

Aber: Ich schreibe gerade ein Programm in VB.NET (Visual Studio 2008) - da funktioniert Euer OLConnector in Zusammenarbeit mit den Microsoft Interop Assemblies leider nicht. das Objekt OLConnector.OLApplication ist immer Nothing. Gibts da auch eine Möglichkeit, Euren OLConnector mit .NET zu verwenden?

mfg
Peter Piry
Connector
1 Dienstag, 09. März 2010 um 20:28 Uhr
Olaf
Danke Sascha!
ein super Tool , nicht mehr wegzudenken!!


Danke
yvComment v.1.24.0