У меня есть некоторый код, который находит все папки контактов, к которым имеет доступ пользователь, путем перебора коллекции 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