2012-11-02 8 views
8

Ich möchte Kontakte aus Outllok über Mapi importieren. Erster Schritt mit Standard-Kontakt ist kein Problem:Outlook Mapi Zugriff auf freigegebene Kontakte

MAPIFolder contactObjects = 
outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts); 
foreach (ContactItem contactObject in contactObjects.Items) { 
    ... import contact ... 
} 

In einem zweiten Schritt gemeinsame Kontakte I zusätzlich importiert werden sollen. Das Einzige, was ich gefunden wurde mit

OpenSharedItem(sharedContacts.vcf) 

aber ich weiß nicht, den Namen der Datei (gemeinsam Artikel) Ich möchte öffnen. Kann jemand auf geteilte Kontakte zugreifen und kann mir helfen?

Tobi


Update:

Danke für den Hinweis mit den VCF-Dateien. Aber wo finde ich sie?


Update2:

ich mit OutlookSpy um gespielt. Ich habe Zugriff auf den Ordner mit freigegebenen Kontakten, sondern nur durch die ID zu wissen (die für andere Nutzer natürlich anders ist):

var ns = outlookObj.GetNamespace("MAPI"); 
var flr = ns.GetFolderFromID("00000000176A90DED92CE6439C1CB89AFE3668F90100D1AD8F66B576B54FB731302D9BB9F6C40007E4BAC5020000"); 

foreach (var contactObject in flr.Items) { 
     ... 
} 

Wie kann ich Zugriff auf den Ordner zu bekommen, ohne die ID zu kennen?

Antwort

1

Nun die Lösung auf die Frage, es ist im Titel gefragt ist fast simpel. Sie müssen nur anrufen:

Recipient recip = Application.Session.CreateRecipient("Firstname Lastname"); 
MAPIFolder sharedContactFolder = Application.Session.GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderContacts); 

Da dieses ich another question fragt nicht mein Problem lösen!

0

Ich habe einige Programmierung getan Kontakt aus Outlook zu erhalten. Ich gebe Ihnen einige Beispiel-Code Ihnen helfen, mit diesem ..es up ist nicht excatly wollen Sie wollen, aber ich denke, das Sie mit Ihrem Problem helfen ...

using System.Collections.Generic; 

// ... 

private List<Outlook.ContactItem> GetListOfContacts(Outlook._Application OutlookApp) 

    { 
    List<Outlook.ContactItem> contItemLst = null; 
    Outlook.Items folderItems =null; 
    Outlook.MAPIFolder mapiFoldSuggestedConts = null; 
    Outlook.NameSpace nameSpc = null; 
    Outlook.MAPIFolder mapiFoldrConts = null; 
    object itemObj = null; 

    try 
    { 

     contItemLst = new List<Outlook.ContactItem>(); 
     nameSpc = OutlookApp.GetNamespace("MAPI"); 
     // getting items from the Contacts folder in Outlook 
     mapiFoldrConts = 
      nameSpc.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); 

     folderItems = mapiFoldrConts.Items; 
     for (int i = 1; folderItems.Count >= i; i++) 
     { 

      itemObj = folderItems[i]; 
      if (itemObj is Outlook.ContactItem) 
       contItemLst.Add(itemObj as Outlook.ContactItem); 
      else 
       Marshal.ReleaseComObject(itemObj); 
     } 

     Marshal.ReleaseComObject(folderItems); 
     folderItems = null; 
     // getting items from the Suggested Contacts folder in Outlook 
     mapiFoldSuggestedConts = nameSpc.GetDefaultFolder( 

      Outlook.OlDefaultFolders.olFolderSuggestedContacts); 

     folderItems = mapiFoldSuggestedConts.Items; 

     for (int i = 1; folderItems.Count >= i; i++) 
     { 

      itemObj = folderItems[i]; 
      if (itemObj is Outlook.ContactItem) 
       contItemLst.Add(itemObj as Outlook.ContactItem); 

      else 
       Marshal.ReleaseComObject(itemObj); 
     } 
    } 

    catch (Exception ex) 
    { 
     System.Windows.Forms.MessageBox.Show(ex.Message); 
    } 

    finally 
    { 

     if (folderItems != null) 
      Marshal.ReleaseComObject(folderItems); 
     if (mapiFoldrConts != null) 
      Marshal.ReleaseComObject(mapiFoldrConts); 
     if (mapiFoldSuggestedConts != null) 
      Marshal.ReleaseComObject(mapiFoldSuggestedConts); 
     if (nameSpc != null) Marshal.ReleaseComObject(nameSpc); 
    } 

    return contItemLst; 

} 
+0

Danke für den Code, aber ich mache das schon. Es ist nicht das Problem, Standard- oder vorgeschlagene Kontakte zu importieren, sondern gemeinsame Kontakte zu lesen. – Tobias