c# Exchange 收件箱获取。
public List<Email> GetInbox() { try { List<Email> lstEmails = new List<Email>(); FolderId folder = FindFolderIdByDisplayName(service, "L1 Support", WellKnownFolderName.Inbox); int offset = 0; int pageSize = 20; bool MoreItems = true; //search in pages while (MoreItems) { ItemView view = new ItemView(20, 0, OffsetBasePoint.Beginning); view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived); view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending); FindItemsResults<Item> findResults = service.FindItems(folder, SetFilter(), view); foreach (Item myItem in findResults.Items) { //body message does not include in returned properties, get message details Item item = Item.Bind(service, myItem.Id); lstEmails.Add(new Email() { Body = item.Body.Text, Mail_cc = item.DisplayCc, Mail_from = item.LastModifiedName, IsRead = item.IsNew, Subject = item.Subject, CreateOn = item.DateTimeCreated }); } //last page if (!findResults.MoreAvailable) MoreItems = false; //next page if (MoreItems) offset += pageSize; } return lstEmails; } catch (Exception ex) { throw ex; } } public FolderId FindFolderIdByDisplayName(ExchangeService service, WellKnownFolderName SearchFolder) { // Specify the root folder to be searched. Folder rootFolder = Folder.Bind(service, SearchFolder); return rootFolder.Id; } public FolderId FindFolderIdByDisplayName(ExchangeService service, string DisplayName, WellKnownFolderName SearchFolder) { // Specify the root folder to be searched. Folder rootFolder = Folder.Bind(service, SearchFolder); // Loop through the child folders of the folder being searched. foreach (Folder folder in rootFolder.FindFolders(new FolderView(100))) { // If the display name of the current folder matches the specified display name, return the folder’s unique identifier. if (folder.DisplayName == DisplayName) { return folder.Id; } } return null; } /// <summary> /// 过滤器 /// </summary> /// <returns></returns> private static SearchFilter SetFilter() { SearchFilter SearchFilter1 = new SearchFilter.ContainsSubstring(ItemSchema.Subject, "【NA Major Impact】 【P1】 System Down"); SearchFilter SearchFilter2 = new SearchFilter.ContainsSubstring(ItemSchema.Subject, "【NA Major Impact】 【P2】 System Slow"); SearchFilter SearchFilter3 = new SearchFilter.ContainsSubstring(ItemSchema.Subject, "【Brazil Major Impact】 【P1】 System Down"); SearchFilter SearchFilter4 = new SearchFilter.ContainsSubstring(ItemSchema.Subject, "【Brazil Major Impact】 【P2】 System Slow"); //筛选今天的邮件 SearchFilter start = new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeCreated, Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"))); SearchFilter end = new SearchFilter.IsLessThanOrEqualTo(EmailMessageSchema.DateTimeCreated, Convert.ToDateTime(DateTime.Now.ToString())); SearchFilter IsRead = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false); SearchFilter.SearchFilterCollection secondLevelSearchFilterCollection1 = new SearchFilter.SearchFilterCollection(LogicalOperator.And, start, end); SearchFilter.SearchFilterCollection secondLevelSearchFilterCollection2 = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, SearchFilter1, SearchFilter2, SearchFilter3, SearchFilter4); SearchFilter.SearchFilterCollection firstLevelSearchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And, secondLevelSearchFilterCollection1, secondLevelSearchFilterCollection2); return firstLevelSearchFilterCollection; }
写这个给自己Mark 一下, 关键是这个多条件筛选,同时有OR 和AND 条件,网上资料很少,从微软官网的 Demo 里找到案例。
链接如下
https://code.msdn.microsoft.com/Exchange-2013-101-Code-3c38582c