我有一个程序,循环所有的电子邮件在Office 365使用的EWS服务,如果符合一些标准,他们得到标记的类别.我然后创建一个sechfolder,看看邮件,有类别。
这是我的代码
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
}
Seachfolder已经创建了,但是当我在Outlook 365中访问它的时候,我得到了一个类似 "Nothing found "的信息(我有丹麦版本,所以不确定英文信息)。
经过一些试验和错误,我发现,我这个,而不是它的正常工作
SearchFilter filter = new SearchFilter.ContainsSubstring(ItemSchema.Subject, "subjectTest");
所以我的问题是,为什么我的seachfolder在使用类别时不能工作,但在检查某物时却能正常工作。
额外的信息--如果我在outlook中创建一个sechfolder,使用相同的sech标准(类别),它可以正常工作。
EWS SearchFilters不支持查询多值字符串属性的逻辑(而底层的Store Restriction支持,这就是为什么它在Outlook中使用MAPI)。例如,你的搜索过滤器在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')"
}