使用 EWS API 从 FindItems 获取 IEnumerable<Microsof.Exchange.WebService.Data.ItemId>

Getting IEnumerable<Microsof.Exchange.WebService.Data.ItemId> from FindItems using EWS API

我正在编写一个 C# 应用程序来检查一些监控邮箱并清除超过指定时间段(例如 6 个月)的电子邮件。

之前我打算获取项目,然后在 foreach 块中,依次删除每个项目。在寻找另一个问题的解决方案时,我偶然发现了 DeleteItems。这需要一个 System.Collection.Generic.IENumerable<Microsoft.Exchange.WebServices.Data.ItemId> 但在下面的代码中,FindItems returns 一个 System.Collections.ObjectModel.Collecion<Microsoft.Exchange.WebServices.Data.Item>.

我如何转换或获取正确的类型以传递给 DeleteItems?

ExtendedPropertyDefinition allFoldersType = new ExtendedPropertyDefinition(13825, MapiPropertyType.Integer);

FolderId rootFolderId = new FolderId(WellKnownFolderName.Root);
FolderView folderView = new FolderView(1000);
folderView.Traversal = FolderTraversal.Deep;

SearchFilter.SearchFilterCollection searchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And);
searchFilterCollection.Add(new SearchFilter.IsEqualTo(allFoldersType, "2"));
searchFilterCollection.Add(new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "allitems"));

FindFoldersResults findFoldersResults = exchangeService.FindFolders(rootFolderId, searchFilterCollection, folderView);

Folder allItemsFolder = findFoldersResults.Folders[0];

searchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And);
searchFilterCollection.Add(new SearchFilter.IsLessThanOrEqualTo(ItemSchema.DateTimeReceived, DateTime.Now.AddMonths(-6)));
searchFilterCollection.Add(new SearchFilter.IsEqualTo(ItemSchema.ItemClass, "IPM.Note"));

var findItems = allItemsFolder.FindItems(searchFilterCollection, new ItemView(100));
var items = findItems.Items;

exchangeService.DeleteItems(findItems, DeleteMode.HardDelete, SendCancellationsMode.SendToNone, AffectedTaskOccurrence.SpecifiedOccurrenceOnly);

每个 Item 都有一个 Id 属性 类型 ItemId,可以使用 linq 访问它:

var findItems = allItemsFolder.FindItems(searchFilterCollection, new ItemView(100));
var itemIds = findItems.Items.Select(item => item.Id);

exchangeService.DeleteItems(itemIds, DeleteMode.HardDelete, SendCancellationsMode.SendToNone, AffectedTaskOccurrence.SpecifiedOccurrenceOnly);

项目文档:microsoft.exchange.webservices.data.item

项目 ID 文档:Microsoft_Exchange_WebServices_Data_Item_Id