В нашем приложении java mail (с использованием Java Mail API) мы сначала подключаемся к почтовому серверу, выбираем сообщения, обрабатываем заголовки, а затем обрабатываем тела и вложения сообщений, как обычно, с помощью pop3.
Session session = Session.getInstance(props, null);
Store store = session.getStore(urln);
store.connect();
Folder f = store.getFolder("INBOX");
f.open(READ);
Messages m = f.getMessages(..);
for (Message m : messages) {
if (!store.isConnected()) {
//raise exception
}
processSubject();
processFrom();
processBodyAndAttachments();
..
}
Реализация прекрасно работает в большинстве сред, но у некоторых клиентов соединение с магазином теряется во время процесса в цикле for.Мы можем видеть исключение повышения в журналах.Мои вопросы:
AFAIK, почтовый сервер может иногда отклонять новые подключения, но прерывает ли он текущие действующие подключения (может быть из-за слишком большого количества подключений или отключает старые для предоставления доступа кновые?)
Когда хранилище отключено, папка тоже закрывается?
Лучше проверить папку?
Соединение может быть потеряно повсюду в цикле for, и не рекомендуется помещать проверку isConnected во всем цикле, это делает код грязным, а также снижает производительностьПроблемы, это хорошая практика, чтобы вставить блок try catch и проверить IOExceptions?(Папка закрыта) Или другие предложения?Какие исключения должны быть обработаны?В некоторых случаях сообщение не может быть проанализировано, но соединение исправно.
Как насчет добавления прослушивателя отключения?