EWS SearchFilter.ContainsSubstring用于过滤发件人电子邮件地址。

5

我正在尝试使用SearchFilter.ContainsSubstring在Exchange Web Services上过滤电子邮件,如下所示:

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

很遗憾,这种方法行不通,我也不想使用查询,因为我无法保证我能使用Exchange Server 2013的功能。

通过在Fiddler中组合各种请求,我发现如果我删除电子邮件地址的最后一个字符,那么过滤器就会起作用,删除第一个字符,也是可以的 - 把它们放回去,就会出问题。

所以也许这有点挑剔,必须是真正的子字符串才能符合条件,所以如果我将包含模式更改为FullString-它不起作用,因此我不能像Substring OR FullString那样进行集合。

看起来我将能够执行(缺少最后一个字符的子串和缺少第一个字符的子串),但它肯定不会如此糟糕,对吗?

我该怎么做才能使其正常工作呢?

请注意,我的代码是VB.NET,但我想象不到这会是问题。

谢谢,

马克

3个回答

7

我发现IsEqualTo过滤器适用于发件人/寄件人,而且它不关心大小写问题,所以这可能是我一开始应该尝试的。

匹配电子邮件地址的代码如下:

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

我仍然不知道如何查找来自同一域名的所有用户的电子邮件。

更多信息:

我真的需要按发件人域过滤,并通过在 .Net 代码中拉取整个文件夹内容并进行筛选来实现。即使这样也会导致问题。

基本上为了保持快速和紧凑,我尝试使用 PropertySet 拉取所有数据:

New PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Sender)

过滤仍然无效,但是电子邮件地址仍然显示在我的项目视图列表中。事实证明,Message.Sender的值包含某种ActiveDirectory路径,直到您调用LoadPropertiesForItems为止。在LoadPropertiesForItems之后,它就是一个电子邮件地址。
请注意,我早期尝试在服务器上进行过滤,但由于过滤必须针对字符串的ActiveDirectory路径样式进行,所以失败了。
所有这些都非常令人困惑,而且不太用户友好。
如果有人知道如何在服务器上按电子邮件域进行过滤,请告诉我!
马克

在Java中,我使用了类似的方法,并且它对我起到了作用:如果(emailSenderList.size() == 1) { return new SearchFilter.IsEqualTo(EmailMessageSchema.From,
emailSenderList.get(0)); }return new SearchFilter.SearchFilterCollection(LogicalOperator.Or, emailSenderList.stream() .map(em -> new SearchFilter.IsEqualTo(EmailMessageSchema.From,
em)) .toArray(SearchFilter.IsEqualTo[] :: new) );
- panksy2k

0
如果(emailSenderList.size() == 1) { return new SearchFilter.IsEqualTo(EmailMessageSchema.From, emailSenderList.get(0)); }
return new SearchFilter.SearchFilterCollection(LogicalOperator.Or, emailSenderList.stream().map(em -> new SearchFilter.IsEqualTo(EmailMessageSchema.From, em)).toArray(SearchFilter.IsEqualTo[]::new));

0

你的目标是什么?Sender不是一个字符串属性,所以使用ContainsSubstring得到奇怪的结果并不让我感到惊讶。我在Office 365上尝试过它,并且它可以工作,但旧版本的Exchange可能无法像处理这种查询那样“聪明”。根据你想要实现的目标,可能会有更好的筛选器。


我注意到From/Sender属性不仅仅是一个简单的文本字符串,但是要使用SearchFilter,您需要一个PropertyBase对象。那么From电子邮件地址字符串的PropertyBase对象是什么?我找不到。 - Mark Rabjohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接