使用EWS时,EWS SearchFilter无法针对我们自己的域正确过滤,但针对其他域则

时间:2019-04-01 15:11:14

标签: vb.net office365 ews-managed-api

我正在创建一个将特定电子邮件同步到内部数据库的应用程序,建议该应用程序使用一个选项来忽略内部电子邮件,但是我发现当我对电子邮件地址(发件人或发件人)使用搜索过滤器时,似乎没有减少结果集的域名。

我尝试包括正确的架构,因为我之前仅设置了itemSchema,并且.From.Sender都不存在,但是仍然失败。

在下面的示例中,我将其还原为仅检索具有给定域名的发件人的电子邮件,但这将返回零结果。

如果将其更改为电子邮件文件夹中存在的域,则会看到一个预期的结果。

以下是我正在使用的代码:

Const pageSize As Int32 = 50
Dim pre_itemView = new ItemView(pageSize)
pre_itemView.PropertySet = new PropertySet( BasePropertySet.IdOnly, EmailMessageSchema.From)
Dim pre_SearchFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From,"@mydomainname.co.uk")
pre_itemView.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending)
Dim pre_findResults = GlobalVariables.exservice.FindItems(WellKnownFolderName.Inbox, pre_SearchFilter, pre_itemView)
Console.WriteLine("Total Items found:{0}", pre_findResults.TotalCount.ToString())

我希望它能正常工作,而且我只会看到来自我的域的电子邮件,然后我可以依次使用.Not过滤器将代码还原为:

SearchFilter.Not(New SearchFilter.ContainsSubstring(EmailMessageSchema.From,"@mydomainname.co.uk"))

这将颠倒前面代码中看到的结果。

此功能可能不适用于您自己的域名。

作为最后一根稻草,我可以在以后绑定每个结果并执行各种任务时跳过。我只想检索地址,如果它与域匹配,则继续进行下一个结果,但是绑定确实需要花费一些时间才能完成,在一个大邮箱上,我可以看到为什么跳过内部电子邮件的想法很有用。 >


更新:

看来,即使我将域查找字符串从"@mydomainname.co.uk"更改为仅"my",它似乎也可以过滤,尽管它不是很有用。

超过两个字符,并且无法正确过滤掉。

我想到了使用:

dim pre_SearchFilter as New SearchFilter.SearchFilterCollection(LogicalOperator.And)
pre_SearchFilter.Add(New SearchFilter.Not(New SearchFilter.ContainsSubstring(EmailMessageSchema.From, "yo")))
pre_SearchFilter.Add(New SearchFilter.Not(New SearchFilter.ContainsSubstring(EmailMessageSchema.From, "ur")))
pre_SearchFilter.Add(New SearchFilter.Not(New SearchFilter.ContainsSubstring(EmailMessageSchema.From, "do")))
pre_SearchFilter.Add(New SearchFilter.Not(New SearchFilter.ContainsSubstring(EmailMessageSchema.From, "ma")))
pre_SearchFilter.Add(New SearchFilter.Not(New SearchFilter.ContainsSubstring(EmailMessageSchema.From, "in")))

,但这会过滤掉所有电子邮件,即使SearchFilterCollection正在使用.And运算符也是如此。

我在这里做什么错了?

0 个答案:

没有答案