2015-02-11 260 views
0

我试图使用过滤器上SearchFilter.ContainsSubstring Exchange Web服务的电子邮件如下:EWS SearchFilter.ContainsSubstring要过滤的发件人的电子邮件地址

sfilter = New SearchFilter.ContainsSubstring(EmailMessageSchema.Sender, EmailAddress, ContainmentMode.Substring, ComparisonMode.IgnoreCase) 
MailItems = service.FindItems(Folder.Id, sfilter, view) 

不幸的是,这并不工作,我不想要使用查询,因为我不能保证我可以使用Exchange Server 2013的功能。

在Fiddler中编写各种请求,我可以观察到如果我删除电子邮件地址的最后一个字符,那么过滤器的作品,删除第一个字符,工程 - 把他们回来,破碎。

所以也许它是迂腐的,它必须是一个真正的子字符串来限定,所以如果我改变包容模式为FullString - 它不起作用,所以我不能做任何事情像一个集合与子字符串或FullString 。

它看起来像我将能够做到的(最后一个字符缺失的子字符串和第一个字符缺失的子字符串),但它肯定不能被破坏吗?

我能做些什么才能使其发挥作用?

请注意,我的代码是在VB.NET中,但我无法想象这是问题所在。

干杯,

马克

回答

1

我发现IsEqualTo过滤器与From/Sender一起工作,并不关心区分大小写的问题,所以它可能是我应该尝试开始的。

的代码相匹配的电子邮件地址是:

sfilter = New SearchFilter.IsEqualTo(EmailMessageSchema.From, New EmailAddress(Message.FromAddress)) 
MailItems = service.FindItems(FailureFolder.Id, sfilter, iv) 

我还是不知道如何找到用户的所有邮件在同一领域,但。

更多信息:

我真的需要通过发件人域筛选并没有通过和筛选拉动整个文件夹内容的.Net代码。即使这会导致问题。

基本上让事情变得快速而紧张,我试图把所有的数据与属性集:

New PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Sender) 

过滤仍然没有工作,但电子邮件地址在我的名单依然表现出的物品查看。事实证明,Message.Sender的值包含某种ActiveDirecty路径,直到调用LoadPropertiesForItems。在LoadPropertiesForItems之后,它是一个电子邮件地址。

请注意,我之前在服务器上进行过滤的尝试已遭到破坏,因为必须根据ActiveDirectory路径的字符串样式进行过滤。

这一切都非常混乱,而且根本不方便用户使用。

如果有人对如何在服务器上通过电子邮件域进行过滤有任何想法,请告诉我!

马克

0

什么是你的目标是什么?发件人不是字符串属性,所以我不惊讶ContainsSubstring的结果很奇怪。我对Office 365进行了尝试,结果很奏效,但旧版Exchange可能不会像处理这种查询那样“聪明”。根据你想要达到的目标,可能会有更好的过滤器。

+0

我注意到,有更多的从不是一个简单的文本字符串/发件人特性,但使用SearchFilter,你需要一个propertyBase对象。什么是来自电子邮件地址字符串的PropertyBase对象?我找不到一个。 – 2015-02-12 10:00:40

相关问题