【发布时间】:2011-02-23 10:16:23
【问题描述】:
我有一些代码可以通过遍历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
【问题讨论】:
标签: vb.net office-2007 outlook-object-model