提问者:小点点

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


我正在编写一个C#应用程序,通过一些监控邮箱,清除超过指定期限(例如6个月)的电子邮件。

以前我要获取这些项,然后在foreach块中依次删除每个项。在寻找另一个问题的解决方案时,我无意中使用了DeleteItems。这需要System.Collection.Generic.IEnumerable,但在下面的代码中,FindItems返回System.Collection.ObjectModel.Collection

如何转换或获取传递给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);

共1个答案

匿名用户

每个项目都有ItemId类型的ID属性,可以使用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