Я использую Java EWS API для подключения моего приложения к MS Exchange и чтения запросов электронной почты пользователей. Затем эти запросы обрабатываются в рамках рабочего процесса системы. Количество писем в день ограничено до 50, поэтому общий объем меньше. Однако я ищу эффективный и надежный механизм чтения с сервера обмена с помощью EWS API. Также обратите внимание, что как только электронное письмо обработано, мы перемещаем его во вложенные папки, чтобы в папке «Входящие» были только необработанные запросы.
Насколько я понимаю, в настоящее время используются следующие схемы для подключения к серверу Exchange и выполнения различных операций с почтовым ящиком.
Опрос - подключение к Exchange с помощью стандартного интерфейса службы Exchange; найти все новые электронные письма и обработать их по порядку. Клиент лучше контролирует сбои и синхронизацию между чтением и перемещением в обработанные папки. С другой стороны, взаимодействие происходит не в реальном времени, и для обмена устанавливаются связи, даже если нет никакой активности.
Уведомления по запросу - этот метод почти идентичен предыдущему, подпишитесь на уведомления по запросу с использованием интервала и читайте электронные письма из папки «Входящие» всякий раз, когда происходит событие таймера. Плюсы и минусы аналогичны подходу 1.
Push-уведомления - здесь клиенты подписываются на сервер обмена для получения push-уведомлений, регистрируясь на определенные события и определяя механизм обратного вызова (клиентская веб-служба) для получения уведомлений. С другой стороны, уведомления работают почти в реальном времени, а соединения устанавливаются только при наличии событий. С другой стороны, я вижу, что подписками и водяными знаками нужно управлять на стороне клиента, чтобы события не пропадали. Не уверен, что это все еще надежный подход, как то, что происходит с сообщениями, которые уже находятся в папке «Входящие» до установления подписки; будут ли эти события воспроизведены при запуске сервера? Не ясно.
Подписка на потоковую передачу - клиенты устанавливают соединение для потоковой передачи, а затем поддерживают его с сервером не более 30 минут, и в течение этого времени Exchange будет уведомлять о любых зарегистрированных событиях. После разрыва соединения его можно восстановить, чтобы подписка оставалась активной. Это казалось лучшим подходом, пока я не услышал, что дополнительные шаги для синхронизации элементов папки и поддержания состояния синхронизации; требуется через регулярные промежутки времени, чтобы не пропустить события при подключении / отключении.
Глядя на мои потребности (надежно читайте электронные письма с сервера Exchange) и анализ различных вариантов, я считаю, что подход 1 проще и надежнее, поскольку он дает лучший контроль над всем процессом. Но в то же время я хотел пообщаться с другими, кто знаком с API, чтобы исправить меня, если я неправильно понимаю фреймворк с точки зрения плюсов и минусов.
Я открыт для любых предложений от группы, чтобы сделать это лучше, поскольку намерение состоит в том, чтобы не пропустить ни одного электронного письма.