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')"
}
我有一个程序可以使用 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')"
}