Для использования слушателя на папку сообщений в Jakarta Mail, необходимо создать экземпляр javax.mail.Store и подключиться к почтовому ящику с помощью метода store.connect().
Затем нужно получить объект папки, на которую будет установлен слушатель с помощью метода store.getFolder(). Установить слушателя можно вызвав метод folder.addMessageCountListener(), передав в качестве параметра экземпляр класса, реализующего интерфейс javax.mail.event.MessageCountListener.
В вашем примере вы правильно устанавливаете слушателя на папку с помощью метода folder.addMessageCountListener(). Однако, чтобы программа не завершалась до срабатывания слушателя, необходимо вставить бесконечный цикл, который будет ожидать событий. Например:
public static void main(String[] args) throws MessagingException {
// Подключаемся к почтовому ящику
Store store = Session.getDefaultInstance(new Properties()).getStore("имя_протокола");
store.connect("хост", "логин", "пароль");
// Получаем папку
Folder folder = store.getFolder("inbox");
// Устанавливаем слушателя
folder.addMessageCountListener(new MessageCountListener() {
@Override
public void messagesAdded(MessageCountEvent messageCountEvent) {
Message[] messages = messageCountEvent.getMessages();
if(messages.length!=0){
for (Message s :
messages) {
try {
//System.out.println(messages.length);
new Downloader().download(s);
} catch (MessagingException e) {
throw new RuntimeException(e); //todo
} catch (IOException e) {
throw new RuntimeException(e); //todo
}
}
}
}
});
// Бесконечный цикл для ожидания событий
while (true) {
try {
Thread.sleep(1000); // Приостанавливаем выполнение на 1 секунду
} catch (InterruptedException e) {
// Обработка ошибок
}
}
}
В этом примере мы создаем бесконечный цикл, который будет ожидать события в папке inbox. Если в папку придут новые сообщения, то будет вызван метод messagesAdded() слушателя, который будет загружать вложения. Если в папку не придут новые сообщения, то программа будет продолжать ждать события.