Intereting Posts

Доступ к общим контактам Outlook Mapi

Я хочу импортировать контакты из Outllok через Mapi. Первый шаг со стандартным контактом – это не проблема:

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

На втором этапе я также хочу импортировать общие контакты. Единственное, что я нашел, это использовать

 OpenSharedItem(sharedContacts.vcf) 

но я не знаю имя файла (общий элемент), который я хочу открыть. Кто-нибудь знает, как получить доступ к общим контактам и может помочь мне?

Tobi


Обновить:

Спасибо за подсказку с vcf-Files. Но где я их найду?


Update2:

Я играл с OutlookSpy. Я получил доступ к папке с общими контактами, но только зная идентификатор (что, конечно, отличается для других пользователей):

 var ns = outlookObj.GetNamespace("MAPI"); var flr = ns.GetFolderFromID("00000000176A90DED92CE6439C1CB89AFE3668F90100D1AD8F66B576B54FB731302D9BB9F6C40007E4BAC5020000"); foreach (var contactObject in flr.Items) { ... } 

Как получить доступ к папке, не зная идентификатор?

    Вам необходимо либо явно проанализировать файлы vCard, либо вы можете использовать Redemption – он позволяет импортировать файлы vCard с помощью RDOContactItem .Import – http://www.dimastr.com/redemption/RDOMail.htm#methods

    Ну, решение вопроса, как его просят в названии, почти просто. Вам просто нужно позвонить:

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

    Поскольку это не решит мою проблему, я задам еще один вопрос !

    Я сделал некоторые программы, чтобы получить контакт с Outlook. Я даю вам пример кода, который поможет вам справиться с этим. Я не хочу, чтобы вы хотели, но я думаю, что это поможет вам справиться с вашей проблемой …

      using System.Collections.Generic; // ... private List GetListOfContacts(Outlook._Application OutlookApp) { List 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(); 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; }