EWS(office 365) 创建 Seachfolder 不工作

EWS(office 365) create Seachfolder not working

我有一个程序可以使用 EWS 服务循环 Office 365 中的所有电子邮件,如果符合某些条件,它们就会被标记为一个类别。 然后我要创建一个 seachfolder 来查找具有该类别的邮件。

这是我的代码

SearchFolder searchFolder = new SearchFolder(service);
            SearchFilter filter = new SearchFilter.ContainsSubstring(ItemSchema.Categories, categoryName);
            searchFolder.DisplayName = "Mulige CPR-data";

            searchFolder.SearchParameters.RootFolderIds.Add(WellKnownFolderName.Inbox);
            searchFolder.SearchParameters.Traversal = SearchFolderTraversal.Deep;
            searchFolder.SearchParameters.SearchFilter = filter;

            try
            {
                searchFolder.Save(WellKnownFolderName.SearchFolders);
                Console.WriteLine(searchFolder.DisplayName + " added.");
            }
            catch (Exception e)
            {
                //error handling
            }

Seach 文件夹已创建,但当我在 Outlook 365 中访问它时,我收到一条消息,内容类似 "Nothing found"(我有丹麦语版本,所以不确定英文消息)。

经过反复试验后,我发现我这样做效果很好

SearchFilter filter = new SearchFilter.ContainsSubstring(ItemSchema.Subject, "subjectTest");

所以我的问题是为什么我的 seachfolder 在使用类别时不起作用,但在检查主题时却工作正常。

额外信息 - 如果我使用相同的搜索条件(类别)在 Outlook 中创建一个搜索文件夹,它工作正常。

EWS SearchFilters 不支持查询多值字符串属性的逻辑(而底层存储限制支持,这就是它在使用 MAPI 的 Outlook 中工作的原因)。例如,您的搜索过滤器在 FindItem 请求中也不起作用。在 Microsoft Graph 中,他们似乎支持一些额外的搜索逻辑,因此您可以创建将执行 MV 搜索的搜索文件夹,例如以下内容可以工作

https://graph.microsoft.com/v1.0/me/mailfolders('searchfolders')/childfolders


{
    "@odata.type": "microsoft.graph.mailSearchFolder",
    "displayName": "Red Items",
    "includeNestedFolders": true,
    "sourceFolderIds": [
        "AQ.."
    ],
    "filterQuery": "categories/any(a:a eq 'Red Category')"
}