EWS SearchFilter неправильно фильтрует для нашего собственного домена при использовании EWS, но делает для других - PullRequest
0 голосов
/ 01 апреля 2019

Я создаю приложение, которое синхронизирует определенные электронные письма с внутренней базой данных, и было предложено, что вариант приложения игнорирует внутренние электронные письма, однако я обнаружил, что при использовании фильтра поиска по адресу электронной почты (отправителю или от) симя домена, которое, по-видимому, не уменьшает результирующий набор.

Я попытался включить правильную схему, так как у меня было установлено только 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.

Что я здесь не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...