Очевидно, что не так сложно отправлять электронные письма из приложения Java EE через JavaMail. Меня интересует лучшая модель для получения электронных писем (в основном, отскакивание уведомлений)? Меня не интересуют подходы, основанные на IMAP/POP3 (опрос почтовых ящиков) - мое приложение будет реагировать на входящие письма.
Один из подходов, о котором я мог думать, будет
- Сохранять существующий MTA (постфикс на linux в моем случае) → команда ops уже знает, как настроить/управлять им.
- Для каждой полученной почты создайте приложение Java, которое получает данные и отправляет его через JMS. Я мог бы сделать это через запись в /etc/aliases вроде
myuser: "|/path/to/javahelper"
с javahelper, вызывающим Java-приложение, передавая STDIN вместе. - MDB (часть приложения Java EE) получает сообщение JMS, анализирует его, обнаруживает сообщение отказов и действует соответствующим образом.
Другим подходом может быть
- Откройте сетевой разъем прослушивания на порту 25 в контейнере приложений Java EE.
- Свяжите SessionBean с сокетом. Bean является частью приложения Java EE и может анализировать/обнаруживать отказы/обрабатывать сообщения напрямую.
- Сохранять существующий MTA в качестве входящего реле, выполнять всю его фильтрацию защиты/спама, но пересылать письма на
myuser
(которые проходят фильтр) в контейнер приложения Java EE, порт 25.
Первый подход, который я сделал раньше (хотя и на другом языке/настройке).
С точки зрения производительности и (воспринимаемой) чистоты, я думаю, что второй подход лучше, но мне потребовалось бы обеспечить надлежащую реализацию транспорта SMTP. Кроме того, я не знаю, можно ли вообще подключить сетевой сокет с помощью bean...
Какова ваша рекомендация? У вас есть детали о втором подходе?