/// <summary>
 /// 从当前日期开始往前move
 /// </summary>
 /// <param name="date"></param>
 /// <param name="count"></param>
 public void MoveBeforeDateArchive(DateTime date, int count)
 {
     try
     {
         SearchFilter.IsLessThanOrEqualTo    filter  = new SearchFilter.IsLessThanOrEqualTo(ItemSchema.DateTimeReceived, date);
         SearchFilter.IsGreaterThanOrEqualTo filter2 = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date.AddDays(-1));
         SearchFilter.SearchFilterCollection searchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And, filter, filter2);
         if (_service != null)
         {
             FindFoldersResults aFolders = _service.FindFolders(WellKnownFolderName.MsgFolderRoot, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Archive"), new FolderView(10));
             if (aFolders.Folders.Count == 1)
             {
                 FolderId archiveFolderId            = aFolders.Folders[0].Id;
                 FindItemsResults <Item> findResults = _service.FindItems(WellKnownFolderName.Inbox, searchFilterCollection, new ItemView(count));
                 Console.WriteLine($"date: {date.ToShortDateString()}, count: {findResults.TotalCount}");
                 List <ItemId> itemids = new List <ItemId>();
                 foreach (var item in findResults)
                 {
                     itemids.Add(item.Id);
                 }
                 if (itemids.Count > 0)
                 {
                     _service.MoveItems(itemids, archiveFolderId);
                     Console.WriteLine("move successful!");
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Console.Write(ex.Message);
         throw;
     }
 }
        /// <summary>
        ///从当前日期开始往后move
        /// </summary>
        /// <param name="date"></param>
        /// <param name="count"></param>
        public void MoveAfterDateArchive(DateTime date, int count, int days)
        {
            try
            {
                SearchFilter.IsLessThanOrEqualTo    filter  = new SearchFilter.IsLessThanOrEqualTo(ItemSchema.DateTimeReceived, date.AddDays(days));
                SearchFilter.IsGreaterThanOrEqualTo filter2 = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date);
                SearchFilter.SearchFilterCollection searchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And, filter, filter2);
                if (_service != null)
                {
                    FindFoldersResults aFolders = _service.FindFolders(WellKnownFolderName.MsgFolderRoot, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Archive"), new FolderView(10));
                    if (aFolders.Folders.Count == 1)
                    {
                        FolderId archiveFolderId = aFolders.Folders[0].Id;

                        FindItemsResults <Item> findResults = _service.FindItems(WellKnownFolderName.Inbox, searchFilterCollection, new ItemView(count));
                        Console.WriteLine($"date: {date.ToShortDateString()}, count: {findResults.TotalCount}");

                        List <ItemId> itemids = new List <ItemId>();
                        foreach (var item in findResults)
                        {
                            itemids.Add(item.Id);
                        }
                        if (itemids.Count > 0)
                        {
                            Console.WriteLine("moving ... ...");
                            Stopwatch sw = new Stopwatch();
                            sw.Start();
                            _service.MoveItems(itemids, archiveFolderId);
                            sw.Stop();
                            //new Timer(new TimerCallback(timer_Elapsed), null, 0, 30000);

                            Console.WriteLine($"move successful after {sw.ElapsedMilliseconds} ms, then sleep 10s ...");

                            System.Threading.Thread.Sleep(10000); //30s
                        }
                    }
                }
            }
            catch (ServiceRequestException ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("try again...");
                MoveAfterDateArchive(date, count, days);
            }
            catch (ServiceRemoteException ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("sleep 120s ...");
                System.Threading.Thread.Sleep(120000); //120s
                Console.WriteLine("try again...");
                MoveAfterDateArchive(date, count, days);
            }
            catch (Exception)
            {
                throw;
            }
        }
Beispiel #3
0
 public void MoveBeforeDateArchive(DateTime date, int count, int days)
 {
     try
     {
         SearchFilter.IsLessThanOrEqualTo    beginfilter            = new SearchFilter.IsLessThanOrEqualTo(ItemSchema.DateTimeReceived, date);
         SearchFilter.IsGreaterThanOrEqualTo endfilter              = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date.AddDays(-1 * days));
         SearchFilter.SearchFilterCollection searchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And, beginfilter, endfilter);
         if (_service != null)
         {
             FindItemsResults <Item> findResults = _service.FindItems(WellKnownFolderName.Inbox, searchFilterCollection, new ItemView(count));
             message = $"date: {date.ToShortDateString()}, count: {findResults.TotalCount}" + (findResults.TotalCount > 0 ? ", moving..." : ", skip...");
             List <ItemId> itemids = new List <ItemId>();
             foreach (var item in findResults)
             {
                 itemids.Add(item.Id);
             }
             if (itemids.Count > 0)
             {
                 _service.MoveItems(itemids, archiveFolderId);
                 message = $"move successful, then sleep 10s ...";
                 Thread.Sleep(10000); //10s
             }
             else
             {
                 Thread.Sleep(500); //1s
             }
         }
         else
         {
             message = "can't connect to server.";
         }
     }
     catch (ServiceRequestException ex)
     {
         message = ex.Message;
         message = "try again...";
         MoveBeforeDateArchive(date, count, days);
     }
     catch (ServerBusyException ex)
     {
         message = ex.Message;
         message = "pause 120s ...";
         Thread.Sleep(120000); //120s
         message = "try again...";
         MoveBeforeDateArchive(date, count, days);
     }
     catch (Exception ex)
     {
         message = ex.Message;
         throw;
     }
 }
        public void IsLessThanOrEqualTo()
        {
            SearchFilter filter = new SearchFilter.IsLessThanOrEqualTo(
                MailFolderObjectSchema.TotalItemCount,
                5);

            Assert.AreEqual(
                filter.FilterOperator,
                FilterOperator.le);

            Assert.AreEqual(
                "$filter=TotalItemCount le 5"
                , filter.Query);
        }
Beispiel #5
0
        /// <summary>
        /// 过滤器
        /// </summary>
        /// <returns></returns>
        private static SearchFilter SetFilter()
        {
            List <SearchFilter> searchFilterCollection = new List <SearchFilter>();
            //searchFilterCollection.Add(new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
            //searchFilterCollection.Add(new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, true));
            //筛选今天的邮件
            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("yyyy-MM-dd 23:59:59")));

            searchFilterCollection.Add(start);
            searchFilterCollection.Add(end);
            SearchFilter filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilterCollection.ToArray());

            return(filter);
        }
        public void TestSearchFilterCollection()
        {
            SearchFilter lessThanOrEqualTo = new SearchFilter.IsLessThanOrEqualTo(
                MailFolderObjectSchema.TotalItemCount,
                5);

            SearchFilter greaterThan = new SearchFilter.IsGreaterThan(
                MessageObjectSchema.CreatedDateTime,
                new DateTimeOffset(new DateTime(2019, 2, 1)));

            SearchFilter notEqualTo = new SearchFilter.NotEqualTo(
                MessageObjectSchema.Body,
                "test body");

            SearchFilter.SearchFilterCollection searchFilterCollection = new SearchFilter.SearchFilterCollection(
                FilterOperator.and,
                lessThanOrEqualTo,
                greaterThan,
                notEqualTo);

            Assert.AreEqual(
                FilterOperator.and,
                searchFilterCollection.FilterOperator);

            Assert.AreEqual(
                "$filter=TotalItemCount le 5 and CreatedDateTime gt 2019-02-01T12:00:00Z and Body ne 'test body'",
                searchFilterCollection.Query);

            Assert.ThrowsException <ArgumentException>(() =>
            {
                searchFilterCollection = new SearchFilter.SearchFilterCollection(FilterOperator.ge);
            });

            searchFilterCollection = new SearchFilter.SearchFilterCollection(
                FilterOperator.or,
                lessThanOrEqualTo,
                greaterThan,
                notEqualTo);

            Assert.AreEqual(
                FilterOperator.or,
                searchFilterCollection.FilterOperator);

            Assert.AreEqual(
                "$filter=TotalItemCount le 5 or CreatedDateTime gt 2019-02-01T12:00:00Z or Body ne 'test body'",
                searchFilterCollection.Query);
        }
 public void ReceiveEmailByFindItems(DateTime date, int count)
 {
     SearchFilter.IsLessThanOrEqualTo filter = new SearchFilter.IsLessThanOrEqualTo(ItemSchema.DateTimeReceived, date);
     if (_service != null)
     {
         FindItemsResults <Item> findResults = _service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(count));
         int countTemp = 1;
         if (findResults.TotalCount > 0)
         {
             foreach (Item item in findResults)
             {
                 EmailMessage message = EmailMessage.Bind(_service, item.Id);
                 Console.WriteLine(countTemp++ + ": creattime: " + message.DateTimeCreated + ": " + message.Subject + ", from: " + message.From);
             }
         }
         else
         {
             Console.WriteLine("no email.");
         }
     }
 }
        public void GetMailsFromArchive(DateTime date, int count)
        {
            count = 10;
            SearchFilter.IsLessThanOrEqualTo filter = new SearchFilter.IsLessThanOrEqualTo(ItemSchema.DateTimeReceived, date);

            if (_service != null)
            {
                FindFoldersResults aFolders = _service.FindFolders(WellKnownFolderName.MsgFolderRoot, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Archive"), new FolderView(10));
                if (aFolders.Folders.Count == 1)
                {
                    FindItemsResults <Item> findResults = _service.FindItems(aFolders.Folders[0].Id, filter, new ItemView(count));
                    Console.WriteLine("count: " + findResults.TotalCount);
                    int countTemp = 1;
                    foreach (Item item in findResults)
                    {
                        //item.Move(WellKnownFolderName.ArchiveMsgFolderRoot);
                        EmailMessage message = EmailMessage.Bind(_service, item.Id);
                        Console.WriteLine(countTemp++ + "creattime: " + message.DateTimeCreated + ": " + message.Subject + ", from: " + message.From);
                        //message.Move(WellKnownFolderName.ArchiveRoot);
                    }
                }
            }
        }
Beispiel #9
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);
            }
        }
        /// <summary>
        /// This method creates and sets the search folder.
        /// </summary>
        private static SearchFolder CreateSearchFolder(ExchangeService service,
                                                       Dictionary <PropertyDefinition, String> filters, String displayName)
        {
            if (service == null)
            {
                return(null);
            }

            SearchFilter.SearchFilterCollection filterCollection =
                new SearchFilter.SearchFilterCollection(LogicalOperator.And);

            // We only search the nearest 30 days emails.
            DateTime     startDate       = DateTime.Now.AddDays(-30);
            DateTime     endDate         = DateTime.Now;
            SearchFilter startDateFilter =
                new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeCreated, startDate);
            SearchFilter endDateFilter =
                new SearchFilter.IsLessThanOrEqualTo(EmailMessageSchema.DateTimeCreated, endDate);

            filterCollection.Add(startDateFilter);
            filterCollection.Add(endDateFilter);

            SearchFilter itemClassFilter =
                new SearchFilter.IsEqualTo(EmailMessageSchema.ItemClass, "IPM.Note");

            filterCollection.Add(itemClassFilter);

            // Set the other filters.
            if (filters != null)
            {
                foreach (PropertyDefinition property in filters.Keys)
                {
                    SearchFilter searchFilter =
                        new SearchFilter.ContainsSubstring(property, filters[property]);
                    filterCollection.Add(searchFilter);
                }
            }

            FolderId folderId = new FolderId(WellKnownFolderName.Inbox);

            Boolean      isDuplicateFoler = true;
            SearchFilter duplicateFilter  = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, displayName);
            SearchFolder searchFolder     =
                GetFolder(service, duplicateFilter, WellKnownFolderName.SearchFolders) as SearchFolder;

            // If there isn't the specific search folder, we create a new one.
            if (searchFolder == null)
            {
                searchFolder     = new SearchFolder(service);
                isDuplicateFoler = false;
            }
            searchFolder.SearchParameters.RootFolderIds.Add(folderId);
            searchFolder.SearchParameters.Traversal    = SearchFolderTraversal.Shallow;
            searchFolder.SearchParameters.SearchFilter = filterCollection;

            if (isDuplicateFoler)
            {
                searchFolder.Update();
            }
            else
            {
                searchFolder.DisplayName = displayName;

                searchFolder.Save(WellKnownFolderName.SearchFolders);
            }

            return(searchFolder);
        }