Automatisierungen in Outlook
Ziele
Erstellen eines einfachen Mailfilters, der die bisherigen Outlook
Regel Assistenten unterstützt bzw. erweitert.
...
Motivation
Der Wurm W32/Gibe-F
verschickt sich selbst von befallenen Rechnern aus. Zu 'guten' Zeiten
bekam ich bis zu 50 Mails pro Tag, für die nicht ohne weiteres ein
Outlook E-Mail Filter zu erstellen ist, weil Absender, Titel und Inhalt
der E-Mails wechseln.
Oulook - Vorstellung zu Beginn des Projekts
Wenn eine neue Mail empfangen wird, soll unser Filter die einkommende
Mail überprüfen. Ein erster Schritt wäre hier, wenn eine
neue Mail empfangen wird soll eine Massage-Box erscheinen, die
mitteilt: "Hallo, Sie haben Post!"
Diese einfach anmutende Aufgabe warf für uns jedoch erhebliche
Probleme auf.
Start in VBA
Zunächst starteten wir den Versuch in VBA, und griffen von dort
auf die Objekte in Outlook zu. Hier ein einfaches Code-Beispiel in VBA
zum ausprobieren. Es geht die Inbox von Outlook durch und durchsucht
die E-Mail nach einem bestimmten Subject. Bei Erfolg gibt er den
Versender der Nachricht aus.
Public Sub test()
Set mynamespace = DieseOutlookSitzung.GetNamespace("MAPI")
Set mymails = mynamespace.GetDefaultFolder(olFolderInbox)
Set myMailItems = mymails.Items
For Each mail In myMailItems
If mail.Subject = "office projekt" Then
MsgBox mail.SenderName
End If
Next mail
End Sub
Den VBA Editor startet man wie aus allen Office Applikationen mit ALT +
F11. Den Code kann man dann in 'DieseOutlookSitzung' einfügen.
Oder man erstellt sich ein eigenes Modul. Statt "Office projekt" kann
man den Subjekt einer sich im Posteingang befindlichen E-Mail
verwenden. Führt man dann den Code aus (F5) wird der Name
desjenigen angezeigt, von dem die gewählte Mail ist.
!?! der Code wird nicht ausgeführt !?!
Das liegt an Sicherheitseinstellungen. Ich erinner mich noch Dunkel.
Weiss gerade nicht mehr genau wo die Einstellung versteckt ist. TO DO
Schön und gut, wir wollten dann dass der Beispielcode bei einer
eingehenden E-Mail ausgeführt wird. Nach einiger Recherche mussten
wir feststellen, dass das New-Mail-Ereignis
in VBA nicht verfügbar ist. Als Lösung bot sich das
Erstellen eines COM-Add-Ins an. COM
Add-ins vs. Application-Specific Add-ins
COM-Add-In I
Wir starteten mit dem Step by step Example
HOW TO: Build an
Office COM Add-in by Using Visual C# .NET
Das Beispiel funktioniert. Auch, wenn man den Anfang überfliegt
und gleich das Beispiel durchmacht. Dann sogar noch besser. Schwierig
ist vielleicht noch die uns zumindestens ungewohne Entwicklungsumgebung
des VS-Studios .NET. Nach einiger Zeit gewöhnt man sich daran und
wird mit dem Solution-Explorer vertraut.
Wir waren nach diesem Beispiel ziemlich angenervt. Es lief zwar auf
meinem Rechner, nicht jedoch in der FH. Das erstellte Com-Add-In wurde
nicht unter der Liste der installierten Com-Add-Ins angezeigt obwohl es
offensichtlich funktionierte. Entfernen lies es sich auch nicht, selbst
wenn man die entsprechenden Einträge in der Regestry löschte
bzw. veränderte. Ausserdem war der Lerneffekt nicht besonders
hoch, bzw. es dauerte noch eine ganze Weile, bis wir das Beispiel auch
wirklich einigermassen verstanden haben. Nebenbei haben wir C#,
VisualStudio.NET etwas über das .Net Konzept mit dieser
ZwischenSprache / managed Code und unmanaged Code gelernt.
Dabei fanden wir bei unseren Recherchen nicht immer gleich den Goldenen
Pfad.
Nun, ich kürze dass hier ein bisschen ab. Dass Problem, dass der
Code an der FH nich funktionierte, lag daran, dass wir dort das
VSStudio-Projekt auf einem Netzlaufwerk angelegt hatten. Das
Studio vertraute also nicht unserem HOME-Studenten Verzeichnis. Wenn
das Projekt geladen wurde, kam eine kurze dies andeutende
Fehlermeldung. Diese hätte auch zur Lösung des Problems
geführt, wenn man schön brav den Hilfe Button drückt.
Drückst du auf den Hilfe-Button?
COM-Add-In II
Wegen dem Entfernen des COM-Add-Ins, nun ich komme gleich zur
Lösung:
Developing
.NET Smart Clients for Microsoft Office XP (msdn)
Hier lernt man wirklich einiges über das erstellen eines
COM-Add-Ins. Aber wer hätte das hinter dieser Überschrift
denn auch vermutet? Dass das genau der Artikel ist, mit dem wir von
Anfang an hätten starten sollen. Das hätte uns viele Stunden
Arbeit für 3 Mann erspart. Also! Wenn ihr VS-Studio .NET und
Com-Add-Ins erstellen wollt, fangt hier an.
Du lernst hier:
Wie man ein Com-Add-In installiert und deinstalliert mithilfe eines
MSI-Installers.
Dass man um auf spezielle Objekte zurgreifen zu können im
Projekt noch Referenzen hinzufügen muss!
Wie man den Code den man fabriziert, debuggt.
Was noch fehlt ist, wie entfernt man den Button
aus der Symbolleiste:
Die in dem Artikel beschriebene Anleitung zur Installation und
Deinstallation des Com-Add-Ins beeindruckt den Button, den wir im
ersten Beispiel erzeugt haben, nicht sonderlich. Er bleibt, auch
nachdem man brav 'MyComAddIn' aus der Liste der installierten Programme
entfernt hat.
Es hilft: Extras, Anpassen und dort bei den Symbolleisten
der Button Zurücksetzen. Zusätzliche Einträge in
der Symbolleiste Standard verschwinden nach dieser Aktion. Hoffentlich
treten keine ungewünschten Nebeneffekte auf :-).
wie greife ich auf den Objektbrowser zu.
Wenn ich die Referenzen für Outlook hinzugefügt habe, klicke
ich im Solution-Explorer auf die Outlook-Referenz. Der Objektbrowser
startet automatisch. Er ist sehr nett, und hilft bestimmt auch, wenn
man VBA programmieren möchte. Er gibt einen Überblick
über die Objektstruktur der OfficeApplikationen wie Oulook oder
Word zu bekommen. Natürlich kann man auf die Detailiertere Hilfe
in VBA nicht verzichten. Für den größeren
Überblick empfehle ich hier auf alle Fälle einmal
reinzuschauen!
Achtung!!!
Der XML Web-Service funktioniert nicht wie beschrieben. Der Service ist
umgezogen und man klickt sich zu einer neuen Adresse in der .NET
Framework Community durch. Dort bekommt man dann ein Zip-File zum
runterladen. Ich habe den Service lokal dann nicht zum laufen gebracht,
weil ich nicht auf meinen IIS zugreifen konnte. Ich war nicht
berechtigt, bzw. wusste den gültigen Login nicht.
Trotzdem empfehle ich, das Beispiel durchzumachen, nur die
entsprechende Codeteile, in denen auf den Sevice zugegriffen wird,
wegzulassen. Man lernt dabei eine Menge, unter anderem "wie organisiere
ich meine Klassen". Besonders viel lernt ihr, wenn ihr für den
Projektnamen einen anderen als MyAddIn nehmt.
Die Grenze
Folgende Problemkreise gibt es jetzt noch:
Wie bekomme ich das Com-Add-In jetzt in die Liste der eingebundenen
Com-Add-Ins in der Office Applikation?
Wie bekomme ich Zugriff auf die E-Mails in der Inbox?
Wie mache ich aus dem VS.Net Com-Add-In ein Com-Add-In dass ich auf
einem anderen Rechner installieren kann?
Die Sicherheitseinstellungen sind auch problematisch.
Kann ich auch VBA-Funktionen aus meinem Com-Add-In aufrufen?
die Microsoft.Office.Interop.Outlook (PiA)
Bei Adding Outlook References bin ich stecken geblieben. Ich
habe in einem anderen Projekt nach der Beschreibung auf HOW TO: Binding for
Office Automation Servers with Visual C# .NET mir etwas
zusammengereimt. So habe ich es geschafft die VS.Studio .Net Umgebung
für die SyntaxUnterstützung zu sensibilisieren. Ich denke
aber, um Nägel mit Köpfen zu machen muss man besser A
Primer to the Office XP Primary Interop Assemblies studieren.
Um das erstellte Add-In dann auf einen anderen Rechner zu bringen wohl
auch noch Deployment
of Managed COM Add-Ins in Office XP.
Für die Sicherheitsproblematik vielleicht noch Office
Automation and Digital Certificates Demonstration.
Um in VBA erstellten Code in einem COM-Add-In zu verwursten empfehle
ich Converting
Microsoft Office VBA Macros to Visual Basic .NET and C#.
Die Verwendung des Objektbrowsers habe ich oben erklärt. Die
offizielle Microsoft .NET Framework Community ist http://www.gotdotnet.com/ und
eine Linkliste gibt microeye
Abschließend sei zu Bemerken, dass wir Zeitweise ganz schön
frustriert waren. Wir haben uns durch ganz schön viel Wust
gekämpft und dass viel zu oberflächliche Buch dass wir
hatten, war wirklich keine Hilfe. Zwar von 2002, aber dort war die Rede
davon, dass noch nicht klar ist, ob mit VS.Net Com-Add-Ins
überhaupt unterstützt werden. Nun gut. Dort heisst es ja
jetzt auch Shared-Add-Ins. Vielleicht hilft Euch ja diese Internetseite
ein bisschen weiter, wenn ihr Euch in diese Gebiete vorwagt. Ich kann
mir vorstellen, dass das Ganze durchaus Spass macht, wenn man ein
bisschen Hilfestellung hat und nicht dauernd vor große schwarze
Wände läuft.
Ferdi, Zhijian und Gregor
Gerne aktualisiere ich hier auch, oder geb Hilfestellung, wenn meine
Zeit es zulässt. Immer her mit Kommentaren :-))
zurück