public IList <EmailMessageWrapper> FindUnreadEmails(ExchangeConfigurationCredentials credentials) { if (credentials == null) { throw new ArgumentNullException("credentials"); } var itemView = new ItemView(MaxItemCount); itemView.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending); var outOffOfficeEmailFilter = new SearchFilter.IsNotEqualTo(ItemSchema.ItemClass, "IPM.Note.Rules.OofTemplate.Microsoft"); var filters = new SearchFilter.SearchFilterCollection(LogicalOperator.And) { UnreadEmailFilter, outOffOfficeEmailFilter }; var folderId = GetInboxFolder(credentials); var result = _exchangeService.FindItems(credentials, folderId, filters, itemView) .Select(message => GetEmailMessageWrapper(message, credentials.Id)) .ToList(); if (result.Any(c => c.Address == null || c.DisplayName == null || c.ExchangeConfigurationId == null || c.EmlContent == null || c.ItemId == null)) { System.Diagnostics.Debug.WriteLine($"{result.Count} unread email(s) found in mailbox {credentials.ExchangeName}"); } return(result); }
/// <summary> /// Create a search filter for filtering items based on equality comparisons of property values. /// </summary> /// <param name="service">An ExchangeService object with credentials and the EWS URL.</param> private static void UseAnEqualitySearchFilter(ExchangeService service) { // The IsGreaterThan filter determines whether the value of a property is greater than a specific value. // This filter instance filters on the DateTimeReceived property, where the value is greater than a month ago. SearchFilter.IsGreaterThan isGreaterThan = new SearchFilter.IsGreaterThan(EmailMessageSchema.DateTimeReceived, DateTime.Now.AddMonths(-1)); // The IsGreaterThanOrEqualTo filter determines whether the value of a property is greater than or equal to a specific value. // This filter instance filters on the DateTimeCreated property, where the value is greater than or equal to a week ago. SearchFilter.IsGreaterThanOrEqualTo isGreaterThanOrEqualTo = new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeCreated, DateTime.Now.AddDays(-7)); // The IsLessThan filter determines whether the value of a property is less than a specific value. // This filter instance filters on the DateTimeReceived property, where the value is less than the time an hour ago. SearchFilter.IsLessThan isLessThan = new SearchFilter.IsLessThan(EmailMessageSchema.DateTimeReceived, DateTime.Now.AddHours(-1)); // The IsLessThanOrEqualTo filter determines whether the value of a property is less than or equal to a specific value. // This filter instance filters on the DateTimeCreated property, where the value is less than or equal to the time two days ago. SearchFilter.IsLessThanOrEqualTo isLessThanOrEqualTo = new SearchFilter.IsLessThanOrEqualTo(EmailMessageSchema.DateTimeCreated, DateTime.Now.AddDays(-2)); // The IsEqualTo filter determines whether the value of a property is equal to a specific value. // This filter instance filters on the Importance property where it is set to Normal. SearchFilter.IsEqualTo isEqualTo = new SearchFilter.IsEqualTo(EmailMessageSchema.Importance, Importance.Normal); // The IsNotEqualTo filter determines whether the value of a property is not equal to a specific value. // This filter instance filters on the IsRead property, where it is not set to true. SearchFilter.IsNotEqualTo isNotEqualTo = new SearchFilter.IsNotEqualTo(EmailMessageSchema.IsRead, true); // Create a search filter collection that will filter based on an item's Importance and IsRead flag. // Both conditions must pass for an item to be returned in a result set. SearchFilter.SearchFilterCollection secondLevelSearchFilterCollection1 = new SearchFilter.SearchFilterCollection(LogicalOperator.And, isEqualTo, isNotEqualTo); // Create a search filter collection that will filter based on an item's DateTimeCreated and DateTimeReceived properties. // All four conditions must pass for an item to be returned in a result set. SearchFilter.SearchFilterCollection secondLevelSearchFilterCollection2 = new SearchFilter.SearchFilterCollection(LogicalOperator.And, isGreaterThan, isGreaterThanOrEqualTo, isLessThan, isLessThanOrEqualTo); // The SearchFilterCollection contains a collection of search filter collections. Items must pass the search conditions // of either collection for an item to be returned in a result set. SearchFilter.SearchFilterCollection firstLevelSearchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, secondLevelSearchFilterCollection1, secondLevelSearchFilterCollection2); // Create a nonpaged view and add properties to the results set. ItemView view = new ItemView(10); view.PropertySet = new PropertySet(EmailMessageSchema.Subject, EmailMessageSchema.DateTimeCreated, EmailMessageSchema.DateTimeReceived, EmailMessageSchema.Importance, EmailMessageSchema.IsRead); try { // Search the Inbox based on the ItemView and the SearchFilterCollection. This results in a FindItem operation call // to EWS. FindItemsResults <Item> results = service.FindItems(WellKnownFolderName.Inbox, firstLevelSearchFilterCollection, view); foreach (Item item in results.Items) { Console.WriteLine("\r\nSubject:\t\t{0}", item.Subject); Console.WriteLine("DateTimeCreated:\t{0}", item.DateTimeCreated.ToShortDateString()); Console.WriteLine("DateTimeReceived:\t{0}", item.DateTimeReceived.ToShortDateString()); Console.WriteLine("Importance:\t\t{0}", item.Importance.ToString()); Console.WriteLine("IsRead:\t\t\t{0}", (item as EmailMessage).IsRead.ToString()); } } catch (Exception ex) { Console.WriteLine("Error: {0}", ex.Message); } }
private void setupSchemaFiltering(SearchFilter.SearchFilterCollection EmailfilterCollection) { if (SearchAlgorithm.HasValue) { SearchFilter EmailFilter; switch (SearchAlgorithm) { case SearchAlgorithmOptions.Equals: switch (SearchField) { case SearchFieldOptions.Body: EmailFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.Body, SearchString); break; case SearchFieldOptions.From: EmailFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.From, SearchString); break; case SearchFieldOptions.Subject: default: EmailFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, SearchString); break; } break; case SearchAlgorithmOptions.DoesNotEqual: switch (SearchField) { case SearchFieldOptions.Body: EmailFilter = new SearchFilter.IsNotEqualTo(EmailMessageSchema.Body, SearchString); break; case SearchFieldOptions.From: EmailFilter = new SearchFilter.IsNotEqualTo(EmailMessageSchema.From, SearchString); break; case SearchFieldOptions.Subject: default: EmailFilter = new SearchFilter.IsNotEqualTo(EmailMessageSchema.Subject, SearchString); break; } break; case SearchAlgorithmOptions.ContainsString: default: switch (SearchField) { case SearchFieldOptions.Body: EmailFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, SearchString); break; case SearchFieldOptions.From: EmailFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, SearchString); break; case SearchFieldOptions.Subject: default: EmailFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Subject, SearchString); break; } break; } EmailfilterCollection.Add(EmailFilter); } }
public void Execute(IActivityRequest request, IActivityResponse response) { userName = settings.UserName; password = settings.Password; domain = settings.Domain; serviceURL = settings.ServiceUrl; exchangeVersion = settings.ExchangeVersion; SearchField = request.Inputs["Search Field"].AsString(); SearchString = request.Inputs["Search String"].AsString(); SearchAlgorithm = request.Inputs["Search Algorithm"].AsString(); folderName = request.Inputs["Folder Name"].AsString(); string alternateMailbox = string.Empty; if (request.Inputs.Contains("Alternate Mailbox")) { alternateMailbox = request.Inputs["Alternate Mailbox"].AsString(); } FolderId folderID = new FolderId(WellKnownFolderName.Inbox); ExchangeService service = new ExchangeService(); switch (exchangeVersion) { case "Exchange2007_SP1": service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); break; case "Exchange2010": service = new ExchangeService(ExchangeVersion.Exchange2010); break; case "Exchange2010_SP1": service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); break; default: service = new ExchangeService(); break; } service.Credentials = new WebCredentials(userName, password, domain); String AccountUrl = userName + "@" + domain; if (serviceURL.Equals("Autodiscover")) { service.AutodiscoverUrl(AccountUrl, (a) => { return(true); }); } else { service.Url = new Uri(serviceURL); } if (!alternateMailbox.Equals(String.Empty)) { service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, alternateMailbox); } if (!folderName.Equals(String.Empty)) { SearchFilter folderFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, folderName); FolderView folderView = new FolderView(int.MaxValue); folderView.PropertySet = new PropertySet(BasePropertySet.IdOnly); folderView.PropertySet.Add(FolderSchema.DisplayName); folderView.Traversal = FolderTraversal.Deep; FindFoldersResults results = service.FindFolders(WellKnownFolderName.MsgFolderRoot, folderFilter, folderView); foreach (Folder folder in results) { folderID = folder.Id; break; } } ItemView emailView = new ItemView(int.MaxValue); SearchFilter EmailFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Subject, SearchString); switch (SearchField) { case "Subject": switch (SearchAlgorithm) { case "Equals": EmailFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, SearchString); break; case "Contains String": EmailFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Subject, SearchString); break; case "Does Not Equal": EmailFilter = new SearchFilter.IsNotEqualTo(EmailMessageSchema.Subject, SearchString); break; } break; case "From": switch (SearchAlgorithm) { case "Equals": EmailFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.From, SearchString); break; case "Contains String": EmailFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, SearchString); break; case "Does Not Equal": EmailFilter = new SearchFilter.IsNotEqualTo(EmailMessageSchema.From, SearchString); break; } break; default: switch (SearchAlgorithm) { case "Equals": EmailFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, SearchString); break; case "Contains String": EmailFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Subject, SearchString); break; case "Does Not Equal": EmailFilter = new SearchFilter.IsNotEqualTo(EmailMessageSchema.Subject, SearchString); break; } break; } FindItemsResults <Item> findResults = service.FindItems(folderID, EmailFilter, emailView); response.Publish("Number of Results", findResults.Items.Count.ToString()); response.WithFiltering().PublishRange(getMail(findResults, service)); }