Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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));
        }