Outlook und .NET

Outlook ist immer noch eine Clientapplication, die eigentlich nicht für den Einsatz automatischer Routinen gedacht ist. Aber wenn Sie ein paar Regeln befolgen, kann können Sie mit Outlook schon erst einfach Lösungen erstellen. Da die Zeiten von Visual Basic 3.0 und COM-Objekten aber schon einige zeit vorbei sind, und nach Microsoft Überzeugung die Zukunft ".NET" gehört, bietet sich natürlich die Entwicklung in dieser Umgebung ab. Outlook ist aber auch in der Version 2007 immer noch ein "COM-Objekt, so dass Sie sich mit "Interop" herumschlagen müssen.

Outlook und .NET
So schlimm ist das mit Interop aber nicht. Ich hoffe aber doch, dass zukünftig Outlook auch mal per .NET ansprechbar sein wird, auch wenn Exchange 2007 über Webservices als Ersatz für CDO schon vieles abdecken kann. Aber Der Weg Über Outlook erlaubt zusätzliche Dinge, von denen Exchange eigentlich nicht viel weiß, z.B. Clientregeln, Formulare etc.

Um Outlook per .NET ansprechen zu können, benötigen Sie eigentlich nur ein Visual Studio Express. Viele Beispiele hat Microsoft schon als KB-Artikel veröffentlicht, z.B.:

  • 314363 HOW TO: Create a contact by using an Item object in Visual Basic .NET
  • 313788 HOW TO: Create an Appointment by using Outlook Object Model in Microsoft Visual Basic .NET
  • 313789 HOW TO: Create a Meeting Request by using Outlook Object Model in Visual Basic .NET
  • 313791 HOW TO: Delete an Outlook Folder by using Outlook Object Model in Visual Basic .NET
  • 313801 HOW TO: Retrieve Appointments by using the Outlook Object Model in Visual Basic .NET
  • 313802 HOW TO: Retrieve Contacts by using Outlook Object Model in Visual Basic .NET
  • 310206 HOW TO: Retrieve Messages by using Collaboration Data Objects für Exchange 2000 in Visual C# .NET
  • 313795 HOW TO: Retrieve unread Messages from Inbox by using Outlook Object Model in Visual Basic .NET

Schon die Fülle an Artikeln und Beispielen zeigt auf, dass die Verbindung von .NET zu Outlook doch nicht so schlecht sein kann und vielleicht eine Alternative zu MAPI/CDO darstellt. Zumal gerade CDO durchaus nicht problemlos in Verbindung mit der PowerShell ist.

Beispielcode

Folgendes einfaches Beispiel soll ihnen aufzeigen, wie sie mit Visual Basic.NET und Outlook eine Verbindung zu einem Exchange Postfach herstellen können.

Imports System.Reflection

Module Module1

    Sub Main()
        ' Create Outlook application.
        Dim oApp As Outlook.Application = New Outlook.Application()

        ' Get Mapi NameSpace and Logon.
        Dim oNS As Outlook.NameSpace = oApp.GetNamespace("mapi")
        oNS.Logon("Profilname", "", False, True)

        ' Get inbox
        Dim oInbox As Outlook.MAPIFolder
        oInbox = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)

        ' Log off.
        oNS.Logoff()

        ' Clean up.
        oApp = Nothing
        oNS = Nothing
        oFolders = Nothing
        oFolder = Nothing
    End Sub

End Module

Allerdings zeigt auch dieses Beispiel, dass der Einsatz von Outlook primär auf das eigene Postfach beschränkt ist. Outlook nutzt Profile, um sich zu verbinden und die "LOGON"-Methode erlaubt nur die Angabe eines Profilnamens, Profilkennworts, Optionen, aber keine Anmeldung wie die mit CDO möglich ist.

Und es ist keine gute Idee, für jedes Postfach, auf welches Sie per Outlook zugreifen wollen, ein MAPI-Profil anzulegen und jedes Mal sich in Outlook ab und neu anzumelden.

Outlook Interop

Aus .NET kann man bei installiertem Outlook auch über die Interop-Schnittstelle auf Outlook zugreifen.

Weitere Links

  • An Introduction to Programming Outlook 2003 using C#
    http://msdn.microsoft.com/library/default.asp?URL=/library/en-us/dv_vstechart/html/ol03csharp.asp
  • 824009 BUG: "Attempt to Access the Method Failed" Error Message When You use a Reference to the Wrong Microsoft Forms 2.0 Object Library
  • 830519 BUG: Cancel Parameter für Office Events Is Ignored in Visual Studio .NET 2003
  • 309336 BUG: InvalidCastException Is Generated When You Try to Sink Outlook Application Events
  • 315981 BUG: Visual Basic .NET "'[Method]' is ambiguous across the inherited interfaces" Error Message When using Office Automation
  • Developing Microsoft Office Solutions using C#
    http://msdn.microsoft.com/library/default.asp?URL=/library/en-us/dnofftalk/html/office02072002.asp
  • 819398 HOW TO: Automate Outlook and Word by using Visual C# .NET to create a pre-populated e-mail message that can be edited
  • 302902 HOW TO: Binding für Office Automation Servers with Visual C# .NET
  • 314363 HOW TO: Create a contact by using an Item object in Visual Basic .NET
  • 313788 HOW TO: Create an Appointment by using Outlook Object Model in Microsoft Visual Basic .NET
  • 314192 HOW TO: Create an Outlook Calendar folder by using the HttpWebRequest class in Visual Basic .NET
  • 313789 HOW TO: Create a Meeting Request by using Outlook Object Model in Visual Basic .NET
  • 313791 HOW TO: Delete an Outlook Folder by using Outlook Object Model in Visual Basic .NET
  • 310203 HOW TO: List All Fields of an Object by using Collaboration Data Objects für Exchange 2000 Server Library in Visual C# .NET
  • 313797 HOW TO: List Members of a Distribution List by using Outlook Object Model in Visual Basic .NET
  • 313796 HOW TO: List the File Menu Commands by using Outlook Object Model in Visual Basic .NET
  • 310269 HOW TO: Read Mail by using Collaboration Data Objects 1.21 Library and Reflection in Visual C# .NET
  • 314195 HOW TO: Retrieve an object's security descriptor property by using Visual Basic .NET
  • 313801 HOW TO: Retrieve Appointments by using the Outlook Object Model in Visual Basic .NET
  • 313802 HOW TO: Retrieve Contacts by using Outlook Object Model in Visual Basic .NET
  • 310206 HOW TO: Retrieve Messages by using Collaboration Data Objects für Exchange 2000 in Visual C# .NET
  • 313795 HOW TO: Retrieve unread Messages from Inbox by using Outlook Object Model in Visual Basic .NET
  • 303296 HOW TO: use Automation to Get and Set Office Document Properties with Visual C# .NET
  • 310251 HOW TO: use the Microsoft Outlook Object Library to force a Send/Receive action by using Visual C# .NET
  • 310258 HOW TO: use the Microsoft Outlook Object Library to retrieve a message from the Inbox by using Visual C# .NET
  • 310259 HOW TO: use the Microsoft Outlook Object Library to retrieve an appointment by using Visual C# .NET
  • 310263 HOW TO: use the Microsoft Outlook Object Library to send a message that has attachments by using Visual C# .NET
  • 310262 HOW TO: use the Microsoft Outlook Object Library to send an HTML formatted message by using Visual C# .NET
  • 827476 Incorrect reference or missing reference to Office 2003 primäry interop assembly (PIA)
  • 311452 INFO: Develop Microsoft Office Solutions with Visual Studio .NET
  • 840585 Information about designing Office XP add-ins and Office 2003 add-ins by using the .NET Framework
  • Introducing .NET to Office Developers
    http://msdn.microsoft.com/library/default.asp?URL=/library/en-us/dnofftalk/html/office10042001.asp
  • Microsoft Office and .NET Interoperability
    http://msdn.microsoft.com/library/default.asp?URL=/library/en-us/dnofftalk/html/office11012001.asp
  • 824012 Microsoft Visual Studio .NET may detect the Microsoft Office 2003 primäry Interop Assemblies as dependencies when you create a Microsoft Visual Studio .NET Setup project
  • Newsgroup - Accessing common properties of Outlook Items in .NET
    http://www.dotnet247.com/247reference/msgs/6/33141.aspx
  • Office 2003 primäry Interop Assemblies Installation
    http://www.shahine.com/omar/PermaLink,guid,87af7cc5-b74d-4fef-a5e6-0f33db18e328.aspx
  • 322027 OL2002: COM Add-Ins Are Not Trusted If They Are Created with Visual Studio .NET
  • 316724 PRB: Macro Warning in Office Application When .NET Shared Add-in Is Loading
  • 316723 PRB: Visual Studio .NET Shared Add-in Is Not Displayed in Office COM Add-ins Dialog Box
  • Programming für Outlook using managed code is better with a Shim
    http://www.shahine.com/omar/PermaLink,guid,3d8a0445-379a-4e0b-bc7c-697a17060040.aspx
  • Programming für Outlook using managed code is hard
    http://www.shahine.com/omar/PermaLink,guid,b0a7193b-7a4f-4d9e-baea-918f7bca45f9.aspx
  • Programming Outlook with C#
    http://www.dotnetjunkies.com/Tutorial/2E1EEEAF-C78A-4A38-A830-AC204B12DF83.dcik
  • 310244 Programming samples that can reference items and folders in Outlook by using Visual C# .NET
  • 813349 Support Policy für Microsoft Exchange APIs with .NET Framework Applications
  • What's New in Microsoft Office Outlook 2003 für Developers?
    http://msdn.microsoft.com/library/?URL=/library/en-us/odc_ol2003_ta/html/odc_OLWhatsNew2k3.asp
  • Programming Microsoft Outlook with Visual Studio .NET
    http://www.microeye.com/resources/res_outlookvsnet.htm
  • Outlook with .NET 2.0
    http://www.c-sharpcorner.com/UploadFile/Nimusoft/OutlookwithNET06262007081811AM/OutlookwithNET.aspx