所有文件夹中的Exchange Web服务(EWS)FindItems

Luk*_*uke 17 c# exchange-server exchangewebservices

我使用以下代码查找用户发送的所有电子邮件,但这只搜索主收件箱文件夹,不检查任何子文件夹.我想搜索所有邮件项目,包括任何子文件夹.

我尝试过WellKnownFolderName.Root和WellKnownFolderName.Inbox,这些只搜索那些文件夹,而不是子文件夹.

    private static void SearchItems(string email)
    {
        ItemView iv = new ItemView(10);
        FindItemsResults<Item> fiitems = _service.FindItems(WellKnownFolderName.Inbox, "from:username@example.com", iv);

        foreach (Item item in fiitems)
        {
            Console.WriteLine("Subject:\t" + item.Subject);
            Console.WriteLine("Received At:\t\t" + item.DateTimeReceived.ToString("dd MMMM yyyy"));
            Console.WriteLine();
        }

        Console.WriteLine("Press Enter to continue");
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

Luk*_*uke 19

我在Glen的博客http://gsexdev.blogspot.com/2011/08/using-allitems-search-folder-from.html上找到了Exchange内AllItems文件夹的一些信息. 我已将PowerShell脚本移植到C#,如图所示下面.

    private static void SearchItems()
    {

        ExtendedPropertyDefinition allFoldersType = new ExtendedPropertyDefinition(13825, MapiPropertyType.Integer);

        FolderId rootFolderId = new FolderId(WellKnownFolderName.Root);
        FolderView folderView = new FolderView(1000);
        folderView.Traversal = FolderTraversal.Shallow;

        SearchFilter searchFilter1 = new SearchFilter.IsEqualTo(allFoldersType, "2");
        SearchFilter searchFilter2 = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "allitems");
        SearchFilter.SearchFilterCollection searchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And);
        searchFilterCollection.Add(searchFilter1);
        searchFilterCollection.Add(searchFilter2);

        FindFoldersResults findFoldersResults = _service.FindFolders(rootFolderId, searchFilterCollection, folderView);

        if (findFoldersResults.Folders.Count > 0)
        {
            Folder allItemsFolder = findFoldersResults.Folders[0];
            Console.WriteLine("Folder:\t" + allItemsFolder.DisplayName);

            ItemView iv = new ItemView(1000);
            FindItemsResults<Item> findResults = allItemsFolder.FindItems("System.Message.DateReceived:01/01/2011..01/31/2011", iv);

            foreach (Item item in findResults)
            {
                Console.WriteLine("Subject:\t" + item.Subject);
                Console.WriteLine("Received At:\t\t" + item.DateTimeReceived.ToString("dd MMMM yyyy"));
                Console.WriteLine("Is New:\t\t" + item.IsNew.ToString());
                Console.WriteLine("Has Attachments:\t\t" + item.HasAttachments.ToString());
                Console.WriteLine();
            }

        }

        Console.WriteLine("Press Enter to continue");
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)