我想枚举电子邮件只有文件夹从Exchange帐户使用Microsoft.Exchange.WebServices Managed API和代码基于this FindFolder() example。使用EWS托管API Enumberate和筛选邮件文件夹
下面的代码过滤所有空文件夹,并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