Я пытаюсь использовать взаимодействие Outlook для извлечения всех электронных писем из папки «Входящие» с указанного адреса электронной почты отправителя и с указанным шаблоном подстановки, и у меня возникают проблемы при попытке применить два фильтра одновременно.
Первое, что меня беспокоит, - это где происходит фильтрация. Это на фильтре Exchange или на клиенте? Конечно, по соображениям производительности я бы хотел, чтобы фильтрация выполнялась на сервере. Я вижу два метода «Restict» и «Find», которые выглядят так, как будто они используются для фильтрации и что они принимают SQL -подобную строку фильтрации.
Я провел большую часть своего времени, пытаясь получить метод Restrict, и безуспешно пытался создать один фильтр с предложением «И», который выполняет фильтрацию как субъекта, так и отправителя. Я добился успеха, применив две последовательно соединенные функции Restrict подряд, как показано ниже, но я подозреваю, что фильтрация подобна LINQ и выполняется на клиенте. Это то, что здесь происходит? Разве я не могу объединить фильтр в одно составное предложение SQL WHERE?
Мне интересно, почему фильтр Subject, кажется, должен иметь префикс с помощью схемы, а фильтр отправителя, кажется, не принять тот же материал схемы. Кроме того, обратите внимание на два значения, назначенные senderEmailAddress (одно из них закомментировано). Я хотел бы фильтровать, используя стандартный SMPT-адрес, но, похоже, работает только адрес Exchange-Speci c. Есть какие-нибудь мысли?
Application oApp = new Application();
NameSpace oNS = oApp.GetNamespace("MAPI");
MAPIFolder inbox = oNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
subject = "%Challenge%";
//senderEmailAddress = "FirstName.LastName@company.com";
senderEmailAddress = "/O=COMPANYNAME/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=LANID";
string senderFilter = $"[SenderEmailAddress] = '{senderEmailAddress}'";
string subjectFilter = $"@SQL=urn:schemas:httpmail:subject LIKE '{subject}'";
var items = inbox.Items.Restrict(senderFilter).Restrict(subjectFilter);
В идеале я хотел бы найти ответ, который бы включал способ фильтрации по SMTP адресу электронной почты и тему с подстановочным знаком, на котором выполняется фильтрация. сервер. (Нет серверных циклов или LINQ-подобных методов, которые существенно делают одно и то же с одним оператором.)
Обновление 1
Я заметил, что могу фильтровать, используя свойство "fromemail" вместо senderemailAddress, как показано выше. Первый, похоже, требует префикса «схемы», а второй - нет. Не зная больше, я предполагаю, что существуют разные подходы с разным синтаксисом, но плохая часть заключается в том, что адрес электронной почты отправителя не соответствует формату, описанному выше.
$ "И urn: schemas : httpmail: fromemail LIKE '{fromEmail}' "