Работа с MS Exchange — II

Составление строки поиска

Искать данные можно не только по одному полю, можно составлять весьма развесистые логические деревья для того, чтобы получить именно то, что надо.

В примере выше использован только один из вариантов. Сейчас я покажу как можно объединить условия поиска, общий алгоритм прост:

  • Создаем необходимые фильтры
  • Объединяем их в коллекции по логическому использованию «И» или «ИЛИ»
  • Создаем специальные коллекции для использования

 

Я думаю, что основная идея, как это работает, ясна. Так же советую поэкспериментировать с разными критериями поиска.

Поиск папок

Поиск папок осуществляется в целом точно так же как и поиск писем. Вот пример:

Надеюсь, что все элементы этого кода вам уже не кажутся страшными и новыми.

Общая информация о поиске

Вообще, искать можно 4 основных элемента:

  • Беседу
  • Встречу
  • Папку
  • Элемент, т.е. все, что не попало в категории выше.

Для указания необходимых элементов для фильтра или для представления, начните набирать в редакторе Schema и Resharper вам подскажет, какие схемы есть вообще, что вы можете использовать.

03

На этом можно завершить рассказ про поиск.

Работа с письмами

В этом разделе вы увидите как можно работать с письмами, насколько это трудозатратно.

Создание письма

Хех, вспоминаются сразу рассказы и примеры про Hello world для разных языков. В целом мы можем продолжить традицию и создать первое письмо с темой и телом Hello world.

Элементарно просто, если надо использовать базовый функционал! При такой отсылке письмо не сохранится в папке «Отправленные». Чтобы иметь историю отправленных сообщений, необходимо вызвать метод SendAndSaveCopy().

Формат письма

В примере выше адресат получит письмо чистым текстом без всяческих изысков. Если же надо послать письмо в формате html, то для этого надо воспользоваться классом MessageBody.

Копии письма

Если вы хотите отправить письмо нескольким людям, а так же использовать опции копии письма и скрытой копии то это можно сделать так:

Вложения

Создание вложений так же не вызывает особенных проблем. Для того, чтобы приложить файл к письму, достаточно воспользоваться коллекцией Attachments.

Для того, чтобы приложить другое письмо, придется попотеть:

И так далее для всех необходимых вещей. Неудобно, соглашусь.

Если вы оформляете html письмо и хотите вставить картинку не во вложение, а в тело письма, то необходимо так же потрудиться немного. Сначала надо оформить тело письма в формате html, где указать ссылку на ресурс во вложении. У самого вложения надо выставить индикатор IsInline. В качестве cid ссылки использовать имя файла во вложении.

В целом особенных проблем нет с отправкой писем и компоновкой самого письма. Дополнительные возможности я думаю вы сможете изучить самостоятельно, хотя я бы наверно все равно не советовал писать свой Outlook.

Удаление писем

Удаление писем происходит буквально в одну строку. После того, как мы нашли ненужное нам письмо, вызываем метод Delete() и все. Метод требует определить так же вы удаляете письмо насовсем или же двигаете в папку «Удаленные».

Ответ и пересылка

Указанные действия так же не требуют большого объема кода и совершаются лаконичными методами.

Есть еще и второй вариант, который позволит более тонко контролировать весь процесс:

В этом случае получаем новый объект с которым будет удобнее работать в плане добавления/удаления/редактирования состава сообщения.

Отложенная отправка письма

Можно делать некоторые трюки с письмами, например отложенная посылка письма.

При использовании такого трюка, письмо будет выслано через три минуты от текущего момента. Но тут есть тонкий момент. Письмо созданное таким образом не может быть удалено средствами EWS. Больше информации о расширенных свойствах можно найти в официальной документации.

Получение писем по расписанию и вложения

В случае моей основной задачи, надо было слушать Exchange Server и при появлении новых писем, надо было их получить и выдрать вложение к нему если оно было определенного формата.

Так как время получения писем было не критично, то я взял простой способ и у меня все работает по методу pull, так что опрашивать сервер надо будет самостоятельно с некоторой периодичностью. Но это не так страшно как может показаться. Exchange Server имеет специальный тип подписки, благодаря которому мы получаем только новые письма, а не каждый раз рыскаем по папкам и самостоятельно отслеживаем пришло что-то или нет. Это большой плюс.

Самое интересное в данном случае, это метод SubscribeToPullNotifications(), который принимает Id папки за которой следить, время таймаута обработки/получения писем, строковый параметр спец.метки для определения обработанных писем, так же указывается тип события, который нас интересует. На спец.метку можно забить, так как для начала процесса можно ставить пустую строку, а дальше оно само пойдет нормально.

Можно так же использовать и Push уведомления, но в таком случае нам надо будет обрабатывать достаточно тяжело «сырые» сообщения сервера. По этому поводу могу рекомендовать статью на CodeProject. Я предлагаю идти более простым путем =)

После того, как подписались на сообщения, их надо обработать. Обработку будем делать в бесконечном цикле, пока есть что обрабатывать. Сначала определяем тип сообщения и если это письмо, а не событие в календаре или еще что-нибудь, то продолжаем проверку на наличие вложений. Если они есть, то получаем необходимые нам данные. Прошу заметить, что хотя свойство HasAttachments будет true, но самих вложений не будет, пока мы их специально не загрузим, так что не стоит полагаться на свойство Attachements.Count.

В свою очередь вложения тоже могут быть не файловыми вложениями и это надо специально проверять.

В конце концов вложения к письму удобно сохранять методом Load(), который может принимать или поток для записи или же путь для сохранения.

Все оказывается не так уж и сложно, как может показаться.

Заключение

Я надеюсь, что вы, так же как и я, увидели всю простоту и удобство использования библиотеки EWS Managed API. Публичный интерфейс действительно продуманный и если вы работали с Outlook, то все элементы и свойства вам должны быть знакомы и не вызывать чувства смущения и недопонимания, что же разработчики такое удумали.

Кроме хорошо продуманного API, официальный сайт изобилует примерами и подробной документацией. Так же вы можете найти 101 пример использования EWS.

В итоге работа с EWS оказалась очень приятной и без выводящих из себя косяков и нелогичных требований.

 

 

Hard’n’Heavy!

 

Оставить комментарий