Задать вопрос
  • Jakarta mail MessageCountListener как правильно использовать?

    @5465
    Для использования слушателя на папку сообщений в 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() слушателя, который будет загружать вложения. Если в папку не придут новые сообщения, то программа будет продолжать ждать события.
    Ответ написан
    Комментировать
  • Как перекодировать строки из windows 1251 в читаемый вид в java?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Так получилось :)
    String a = new String("Øêàô ðàñïðåäåëèòåëüíûé îáðàçåö".getBytes("Windows-1252"), "Windows-1251");
    Ответ написан
    Комментировать