Формулировка проблемы: для реализации различных типов интеграции потребуется общий способ получения данных, переданных обработчиком событий.
Решение: транспортный уровень передачи данных должен быть реализован в виде отдельно стоящего java-приложения и выполнять следующие функции:
Чтение почтовых сообщений из почтовых ящиков типа
IMAP или POP3 (для
IMAP — только INBOX) и
сортировка полученного списка по содержимому заголовка
X-Synergy-Int-Exchange-Event-Timestamp (по
возрастанию времени).
Передача всех почтовых сообщений (в формате
RFC2822) по порядку специальному обработчику
(классу, указанному в настройках) и ожидание от него (для
каждого сообщения) числового кода ответа и опционального текста
ответа.
Если числовой код ответа для обрабатываемого сообщения равен 0 («успешно» обработано), то сообщение удаляется из почтового ящика.
Если числовой код ответа для обрабатываемого сообщения равен 2
(«невозможно обработать в данный момент, подождите»), то далее
через каждые M секунд, N
раз (указанных в настройках) производится повторная передача
сообщения на обработку. Если достигнуто N
повторений и сообщение всё ещё не было обработано (код 2), то
отправителю сообщения (по адресу в поле From:
) отправляется почтовое сообщение, содержащее:
аголовок X-Synergy-Int-Exchange-Code с
содержимым числового кода последнего ответа обработчика;
заголовок
X-Synergy-Int-Exchange-Processing-Times с
содержимым количества опробованных попыток обработки
исходного сообщения;
заголовок X-Synergy-Int-Exchange-Msgid с
содержимым MSGID обрабатываемого сообщения;
и в теле этого письма — сообщение, переданное обработчиком. Исходное сообщение удаляется из почтового ящика.
Если числовой код ответа для обрабатываемого сообщения равен
1 (ошибка) и почтовое сообщение содержит
заголовок X-Synergy-Int-Exchange-Reprocess с
содержимым yes, то далее через каждые
M секунд, N раз (указанных
в настройках) производится повторная передача сообщения на
обработку. Если достигнуто N повторений и
сообщение всё ещё не было обработано (код 1), то отправителю
сообщения (по адресу в поле From:)
отправляется почтовое сообщение, содержащее:
заголовок X-Synergy-Int-Exchange-Code с
содержимым числового кода последнего ответа обработчика;
заголовок
X-Synergy-Int-Exchange-Processing-Times с
содержимым количества опробованных попыток обработки
исходного сообщения;
заголовок X-Synergy-Int-Exchange-Msgid с
содержимым MSGID обрабатываемого сообщения;
и в теле этого письма — сообщение, переданное обработчиком. Исходное сообщение удаляется из почтового ящика.
В остальных случаях отправителю сообщения (по адресу в поле
From: ) отправляется почтовое сообщение,
содержащее
заголовок X-Synergy-Int-Exchange-Code с
содержимым числового кода ответа;
заголовок X-Synergy-Int-Exchange-Msgid с
содержимым MSGID обрабатываемого сообщения;
и в теле этого письма — сообщение, переданное обработчиком. Исходное сообщение удаляется из почтового ящика.
Для реализации этих функций приложение должно иметь следующий набор настроек:
Общий набор настроек для обработки ошибочных случаев «2» и «1»:
Интервал (в секундах) повторной передачи сообщения на обработку;
Количество раз повторной обработки (если указано 0, то повторять бесконечно);
Набор настроек получателя:
Код получателя (строка, состоящая из латинских символов,
- и _, без пробелов);
Тип почтового сервера — POP3 или IMAP;
адрес или DNS-имя почтового сервера (например,
imap.google.com);
порт сервера;
логин;
пароль;
дополнительные настройки (шифрование);
название класса-обработчика;
Таких блоков может быть несколько.
Набор настроек отправителя:
Адрес или имя сервера SMTP;
Порт сервера;
Почтовый адрес отправителя;
Аутентификация на SMTP-сервере, да/нет, если да, то;
логин;
пароль;
дополнительные настройки (шифрование).