2015-02-11 4 views
0

Я пытаюсь фильтровать сообщения электронной почты на веб-служб Exchange, используя SearchFilter.ContainsSubstring следующим образом: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, я могу заметить, что если я удалю последний символ адреса электронной почты, фильтр работает, вместо этого удаляет первый символ, работает - возвращает их, сломается.

Так что, возможно, это педантично, и это должна быть истинная подстрока для квалификации, поэтому, если я изменю режим Containment на FullString, это не сработает, поэтому я не могу сделать ничего подобного коллекции с помощью Substring OR 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. Даже это вызывает проблемы.

В основном, чтобы держать вещи быстро и плотно, я пытался вытащить все данные с PropertySet:

New PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Sender) 

Filtering до сих пор не работает, но адреса электронной почты еще показал в моем списке из пунктов просмотра. Ну, оказывается, что значение Message.Sender содержит в нем какой-то путь ActiveDirecty, пока вы не вызовете LoadPropertiesForItems. После LoadPropertiesForItems это адрес электронной почты.

Обратите внимание, что моя предыдущая попытка фильтрации на сервере была отключена, так как фильтрация должна происходить против стиля пути ActiveDirectory строки.

Это все очень запутанно и совсем не удобно.

Если у кого-нибудь есть идея, как фильтровать по домену электронной почты на сервере, дайте мне знать!

Марк

0

Какова ваша цель? Отправитель не является строковым свойством, поэтому я не удивлен, что результаты нечетны с ContainsSubstring. Я пробовал его против Office 365, и это сработало, но более старые версии Exchange могут быть не такими «умными» в обработке такого рода запросов. В зависимости от того, чего вы пытаетесь достичь, может быть лучший фильтр.

+0

Я заметил, что там больше От свойств/Sender, чем простая текстовая строка, но использовать SearchFilter, вам нужен объект propertyBase. Что такое объект PropertyBase для строки From Address Address? Я не могу его найти. –