Как я могу найти папки "Контакты людей" через объектную модель Outlook? - PullRequest
1 голос
/ 25 мая 2010

У меня есть некоторый код, который находит все папки контактов, к которым имеет доступ пользователь, путем перебора коллекции Application.Session.Stores.

Это работает для контактов пользователя, а также для всех общих папок контактов. Он также находит все папки контактов в дополнительных учетных записях почтовых ящиков, которые пользователь добавил с помощью команды меню Сервис -> Параметры учетной записи ...

Однако для этого требуется, чтобы пользователь имел полный доступ к учетной записи другого лица. Если у пользователя есть доступ только к контактам другого человека, его контакты отображаются в группе «Контакты пользователя» в представлении «Контакты». Как найти те папки контактов, которые не отображаются в Session.Stores?

Чтобы увидеть папку контактов другого пользователя, не добавляя доступ к его полному почтовому ящику, нажмите Файл -> Открыть -> Папка другого пользователя ... в меню Outlook. В диалоговом окне введите имя другого пользователя и выберите Contacts в раскрывающемся списке Тип папки.

Вот код (без проверки и регистрации ошибок), который я использую, чтобы найти список всех папок контактов пользователя Outlook. Я знаю, что это можно (и, возможно, следует) сделать с помощью раннего связывания с типом Outlook.Application, но это не влияет на результаты. EnumerateFolders является рекурсивным, поэтому выполняет поиск во всех подпапках.

Dim folderList = New Dictionary(Of String, String)
Dim outlookApp = CreateObject(Class:="Outlook.Application")
For Each store As Object In outlookApp.Session.Stores
    EnumerateFolders(folderList, store.GetRootFolder)
Next

Private Sub EnumerateFolders(ByRef folderList As Dictionary(Of String, String), ByVal folder As Object)
    Try
        If folder.DefaultItemType = 2 Then
            folderList.Add(folder.EntryID, folder.FolderPath.Substring(2))
        End If

        For Each subFolder As Object In folder.Folders
            EnumerateFolders(folderList, subFolder)
        Next
    Catch ex As Exception

    End Try
End Sub

1 Ответ

2 голосов
/ 02 июня 2010

Так как я не получил здесь никаких ответов (фактически за это получил значок Tumbleweed), я задал этот вопрос на форумах msdn.

http://social.msdn.microsoft.com/Forums/en-US/outlookdev/thread/9edb0bdf-a7cb-451b-b1b4-99c6ec1f8214/

Вотответ:

В Outlook 2007 или более поздней версии перейдите через панель навигации.Для обзора см. http://msdn.microsoft.com/en-us/library/bb206757.aspx. Образец в http://msdn.microsoft.com/en-us/library/bb176429.aspx показывает, как выполнить итерацию всех групп навигации в модуле календаря.Каждый NavigationFolder имеет свойство объекта Folder, которое возвращает фактическую папку из почтового ящика другого пользователя (или другого хранилища).

Это даст вам все папки, с которыми пользователь активно работает.Если вам нужны все папки, к которым они теоретически имеют доступ, вы можете выполнить итерации записей в GAL и для каждой из них попытаться выполнить Namespace.GetSharedDefaultFolder.Если папка не может быть возвращена, у пользователя нет доступа.

Теперь, когда я увидел это, я думаю, что собираюсь использовать ContactsModule для поиска всех папок контактоввместо поиска контактов папки во всех папках в магазине.Должно быть намного быстрее.

...