【发布时间】:2016-09-16 10:34:34
【问题描述】:
我正在尝试使用Microsoft.Exchange.WebServices Managed API 和基于this FindFolder() example 的代码从 Exchange 帐户枚举仅电子邮件文件夹。
以下代码过滤所有空文件夹,以及 Task、Search、Contacts 和 Calendar 文件夹,但仍返回 FreeBusy Data、Recoverable Items 和 Deletions 文件夹。
有没有一种方法可以从返回的文件夹中过滤这些,而不是通过对其名称的字符串匹配?事实上,还有一种过滤Sent Items 和Deleted Items 的方法? (虽然这些不能重命名(而且我对它们是什么有了更好的了解!),我不太担心简单地按名称过滤掉它们)
Dim moreFoldersToReturn As Boolean = True
Const FOLDER_PAGE_SIZE As Integer = 10
Dim folderOffset As Integer = 0
While moreFoldersToReturn
' Create a view with a page size of x
Dim view As New FolderView(FOLDER_PAGE_SIZE, folderOffset)
' Identify the properties to return in the results set.
view.PropertySet = New PropertySet(BasePropertySet.IdOnly)
view.PropertySet.Add(FolderSchema.DisplayName)
' Create an extended property definition for the PidTagAttributeHidden property.
Dim isHiddenProp As ExtendedPropertyDefinition = New ExtendedPropertyDefinition(&H10F4, MapiPropertyType.Boolean)
Dim searchFiltersCollection As List(Of SearchFilter) = New List(Of SearchFilter)
searchFiltersCollection.Add(New SearchFilter.IsEqualTo(isHiddenProp, False)) 'filter hidden folders
searchFiltersCollection.Add(New SearchFilter.IsGreaterThan(FolderSchema.TotalCount, 0)) 'filter empty folders
Dim searchFilterToUse As SearchFilter = New SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFiltersCollection.ToArray())
' Unlike FindItem searches, folder searches can be deep traversals.
view.Traversal = FolderTraversal.Deep
' Send the request to search the mailbox and get the results.
Dim results As FindFoldersResults = Me.exchangeServer.connection.FindFolders(WellKnownFolderName.Root, searchFilterToUse, view)
' Process each item.
Dim folder As Folder
For Each folder In results.Folders
If Not TypeOf folder Is SearchFolder AndAlso
Not TypeOf folder Is ContactsFolder AndAlso
Not TypeOf folder Is TasksFolder AndAlso
Not TypeOf folder Is CalendarFolder Then
Debug.WriteLine("Folder: " & folder.DisplayName)
foldersToReturn.Add(folder)
End If
Next
folderOffset += FOLDER_PAGE_SIZE
moreFoldersToReturn = results.MoreAvailable
End While
给出以下输出:
Folder: Freebusy Data
Folder: Recoverable Items
Folder: Deletions
Folder: Deleted Items
Folder: Inbox
Folder: Sent Items
Folder: TestEmailFolder
【问题讨论】:
标签: exchange-server exchangewebservices