2012-11-02 85 views
8

我想通过Mapi从Outllok导入联系人。 与标准接触第一步是没有问题:Outlook Mapi访问共享联系人

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

在第二步骤中我另外要导入共享联系人。只有我发现的东西是用

OpenSharedItem(sharedContacts.vcf) 

,但我不知道该文件(共享项目)的名称,我想开。 有人知道如何访问共享联系人,并可以帮助我吗?

托比


更新:

感谢您与VCF档案的提示。但我在哪里找到他们?


UPDATE2:

我OutlookSpy发挥各地。我得到了与共享的联系人文件夹访问权限,但只能通过知道ID(这当然是不同的其他用户):

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

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

我如何获得访问该文件夹不知道ID?

回答

1

好解决了一个问题,它在标题中要求几乎简单。 你只需要调用:

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

因为这并没有解决我的问题,我会问another question

0

我已经做了一些规划,以获得从Outlook联系人。 我给你一些示例代码,以帮助您了这个..它是不是excatly想你想,但我认为这将帮助你解决问题...

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

感谢您的代码,但我已经这样做了。导入标准或建议的联系人不是问题,而是阅读共享联系人。 – Tobias