2010-05-24 60 views
1

我有一些代碼通過遍歷Application.Session.Stores集合來查找用戶有權訪問的所有聯繫人文件夾。如何通過Outlook的對象模型找到「People's Contacts」文件夾?

這適用於用戶的聯繫人以及所有公共聯繫人文件夾。它還通過工具 - >帳戶設置...菜單命令找到用戶添加的其他郵箱帳戶中的所有聯繫人文件夾。

但是,這需要用戶完全訪問其他人的帳戶。當用戶只能訪問其他人的聯繫人時,該聯繫人視圖中的「人員聯繫人」組下顯示該人員的聯繫人。如何找到那些在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 

回答

2

因爲我在這裏沒有得到任何答案,(實際上贏得了這個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.aspxhttp://msdn.microsoft.com/en-us/library/bb176429.aspx的示例顯示瞭如何迭代日曆模塊中的所有導航組。每個NavigationFolder都有一個Folder對象屬性,用於從其他用戶的郵箱(或其他商店)返回實際的文件夾。

這會讓你看到用戶正在使用的所有文件夾。如果您需要理論上可以訪問的所有文件夾,則可以迭代GAL中的條目和每個文件夾,嘗試執行Namespace.GetSharedDefaultFolder。如果該文件夾無法返回,則該用戶無權訪問。

現在,我已經看到了這一點,我想我會用ContactsModule查找所有聯繫人文件夾,而不是在存儲中的所有文件夾中搜索聯繫人文件夾。應該快得多。

相關問題