Kontakte aus Outlook auslesen

Beppo98

Mitglied
Guten Tag,

ich bin gerade dabei alle meine Outlook-Kontakte in ein VB.NET Projekt einzulesen. Leider habe ich das Problem, dass das Aulesen nach dem ersten Kontakt abbricht :(

Folgender Code wird verwendet:

Code:
    Public Shared Sub GetContacts()

        Dim OLApplication = New ApplicationClass()
        Dim mapiNamespace As [NameSpace] = OLApplication.GetNamespace("MAPI")
        Dim contacts As MAPIFolder = mapiNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts)
        Dim searchFolder As Outlook.Items = contacts.Items

        For Each foundContact As Outlook.ContactItem In searchFolder

            Console.WriteLine(foundContact.FullName)
            Console.WriteLine(foundContact.Email1Address)
            Console.WriteLine()

        Next

    End Sub

Nach dem ersten Durchlauf der Schleife, d.h. der Name und E-Mail Adresse eines Kontakts wird ausgegeben, erscheint folgende Fehlermeldung:

Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "Outlook.ContactItem" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{00063021-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)).

Kann mir bei diesem Problem jemand weiterhelfen? Ich komme nämlich irgendwie nicht weiter. Es sind atm 5 Kontakte in Outlook vorhanden.

Gruß Beppo
 
Hallo du :)

habe diesbezüglich einen Automatismus geschrieben, der Outlook-Kontakte ausliest und diese in eine Datenbank abgleicht mit bereits vorhandenen Daten.

Um auf die Kontakt-Daten des Adressbuchs zugreifen zu können, kannst du wie folgt vorgehen:

  1. Erstellen einer Instanz der Anwendung Outlook
  2. Definition des Namespace
  3. Ordnerobjekt auf Adressbuch von Outlook setzen
  4. Zugriff auf alle Kontakte mittels For-Schleife
  5. Ausgabe der Kontaktdaten

Hierbei solltest du aber noch Verweise hinzufügen. Gehe dazu in deiner Entwicklungsumgebung (ich benutze C# 2008 Express Edition) in den Projektmappenexplorer und füge folgende Verweise hinzu:
  • Microsoft Office x.0 Object Library
  • Microsoft Outlook 12.0 Object Library

Zu den usings fügst du folgenden Text hinzu:

Code:
using Microsoft.Office.Interop.Outlook;

Um auf die Kontaktdaten zuzugreifen, kannst du hier meinen Quelltext verwenden:

Code:
            var outlookApplication = new ApplicationClass();

            NameSpace mapiNamespace = outlookApplication.GetNamespace("MAPI");

            MAPIFolder contacts = mapiNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts);

            for (int i = 1; i < contacts.Items.Count + 1; i++)
            {
                //Repräsentiert Kontakt[i] aus Kontaktordner(olFolderContacts)
                ContactItem contact = (ContactItem)contacts.Items[i];
                Console.WriteLine(contact.FullName);

Über "contact" kannst du auf die einzelnen Parameter des aktuellen Kontakts zugreifen.

Ich hoffe, damit ist dir weitergeholfen. Falls du weitere Fragen hast, stell sie :)

Grüße aus Bruchsal
 
Hey :)

danke für die ausführliche Antwort. Leider bringt der Code, der fast identisch mit meinem ist, den gleichen Fehler beim zweiten Durchlauf :(

Die Fehlermeldung habe ich bereits oben gepostet. Als Assemblys habe ich folgende eingebunden:

Microsoft Office 11.0 Object Libary (Version 2.3.0.0)
Microsoft.Office.Interop.Outlook (Version 12.0.0.0)

Bei der letzten Assembly habe ich auch bereits die Version 11 probiert. Beide Mal der gleiche Fehler :(

Gruß Beppo
 
So, die Lösung meines Problems war folgende Codezeile:

Code:
If TypeOf obj Is Outlook.ContactItem Then ...

Ich hatte leider in meinen Kontakten eine Verteilerliste, welcher zur obigen Ausnahme führte. :suspekt:

Danke für deine Hilfe Hawkings, hast mir echt weitergeholfen ;)

Gruß Beppo
 

Neue Beiträge

Zurück