我正在创建一个将特定电子邮件同步到内部数据库的应用程序,建议该应用程序使用一个选项来忽略内部电子邮件,但是我发现当我对电子邮件地址(发件人或发件人)使用搜索过滤器时,似乎没有减少结果集的域名。
我尝试包括正确的架构,因为我之前仅设置了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
运算符也是如此。
我在这里做什么错了?