Announcement

Collapse
No announcement yet.

Zugriff auf Outlook-Postfach (Unterschied PST-Datei und Exchange-Server)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf Outlook-Postfach (Unterschied PST-Datei und Exchange-Server)

    Hallo,

    ich greife aus einer C#-Anwendung mittels der Schnittstelle"Microsoft.Office.Interop.Outlook" auf ein MS Outlook 2003 Postfach zu.
    Dabei durchlaufe ich alle Mails im Postfach.

    foreach (Outlook.MailItem curMailItem in oInboxFolder)
    {
    ...
    }


    Liegt das Postfach in Outlook in einer PST-Datei, funktioniert alles wunderbar.
    Ist das Posffach (Inhalt identisch) allerdings auf einem Exchange-Server 2003, tritt nach ca. 260 Durchläufen eine "InvalidCastExeption" mit folgendem Text auf:

    DAs COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentype "Microsoft.Office.Interop.Outlook.MailItem" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID xyz aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt.

    Blockiert der Server hier die Zugriffe, oder woran könnte es liegen?

    Danke,

    Matthias

  • #2
    Sicher das die Postfächer identisch sind?

    Wie auch immer, du solltest auf jeden Fall testen ob das was dort zurückkommt auch wirklich ein MailItem ist und nicht irgend etwas anderes.
    Auch wenn es ein ~Mail~Ordner ist kann es trotzdem jeden Typen (Mail, Notiz, Task etc.) enthalten.

    Comment


    • #3
      Hallo Ralf,

      danke für den Tip, die Postfächer sind identisch. Habe zum Testen mein Exchange
      Postfach in eine PST-Datei exportiert.

      Auch ein Typ-Casting brachte keinen Erfolg.

      foreach (System.Object oObj in oInboxFolder)
      {
      if (oObj is Outlook.MailItem)

      }


      Habe glaube irgendwo mal gelesen zu haben, dass über das Outlook-Objektmodell nur etwas 200 Einträge auf einem Exchange gelesen werden können?

      Ist es evtl. sinnvoller (bzw. richtig) die CDO-Schnittstelle zu verwenden, oder wie geht man richtig vor?

      Danke,

      Matthias

      Comment


      • #4
        Das mit den 200 Einträgen bezog sich vermutlich eher auf den Weg über MAPI-Tables.

        Es sollte da ansonsten eigentlich keine Begrenzung geben. Wenn es immer bei der selben Mail knallt, lösch oder verschieb die doch mal aus der Inbox um zu sehen ob es tatsächlich an diesem speziellen Objekt liegt.
        Du solltest übrigens foreach meiden wenn du an Objekten in COM Collections(wie hier die Mailcollection von Outlook) schraubst.
        Der Enumerator hat schon mal Probleme dir alle Objekte zu liefen, z.B. bekommst du das erste Objekt doppelt dafür das letzte garnicht usw.


        Bezüglich ~sinnvoller~ herangehensweise folgende Empfehlungen.

        - Vermeide die VSTO(Visual Studio Tools for Office)
        - Vermeide soweit möglich das Outlook Objektmodell
        - Versuche soweit möglich alles direkt über MAPI zu regeln
        - Für Outlook Spezifika such dir gute Third Party Unterstützung
        (sieh dir mal Redemption, Outlook Spy an auf http://www.dimastr.com)
        - Wenn deine Anwendung ein Addin für Outlook wird, frage dich sehr genau ob es wirklich in DOTNET geschrieben sein muss. Outlook ist nun mal eine Win32 Anwendung und man handelt sich reichlich Probleme ein wenn man versucht in Outlook ein Dotnet Addin zu betreiben.

        Comment

        Working...
        X