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