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