Формулировка проблемы: для реализации различных типов интеграции потребуется общий способ получения данных, переданных обработчиком событий.
Решение: транспортный уровень передачи данных должен быть реализован в виде отдельно стоящего 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-сервере, да/нет, если да, то;
логин;
пароль;
дополнительные настройки (шифрование).