Слушатель почты Java с использованием Spring Integration

Я использую приведенный ниже код в приложении Springboot:

@Bean
    public IntegrationFlow mailListener() {

        return IntegrationFlows.from(Mail.imapInboundAdapter(receiver()), e -> e.poller(Pollers.fixedRate(60000)))
                .<Message>handle(message -> logMail(message)).get();
    }

    private org.springframework.messaging.Message<?> logMail(org.springframework.messaging.Message<?> message) {
        System.out.println("received a mail********** !");
        // System.out.println(message.getPayload());
        // process message
        return message;
    }

    @Bean
    public ImapMailReceiver receiver() {

        ImapMailReceiver receiver = new ImapMailReceiver(
                "imaps://username:[email protected]/INBOX");
        receiver.setShouldMarkMessagesAsRead(true);
        receiver.setJavaMailProperties(javaMailProperties());
        return receiver;
    }

    private Properties javaMailProperties() {
        Properties javaMailProperties = new Properties();

        /*
         * javaMailProperties.setProperty("mail.imap.socketFactory.class",
         * "javax.net.ssl.SSLSocketFactory");
         * javaMailProperties.setProperty("mail.imap.socketFactory.fallback","false");
         * javaMailProperties.setProperty("mail.store.protocol","imaps");
         */
        // javaMailProperties.setProperty("mail.debug","true");

        return javaMailProperties;
    }

Мое требование - для каждого Pollers.fixedRate (скажем, каждую минуту), сколько новых писем пришло, сколько раз logMail должен запускаться, передавая новое письмо в качестве аргумента (перед следующим опросом). Но этого не происходит. Метод logMail вызывается только один раз для Pollers.fixedRate (каждую 1 минуту), следовательно, обрабатывается только одно письмо. Если я получил, скажем, 3 письма за последнюю 1 минуту, 1-е письмо будет обработано сейчас. 2-е письмо будет обработано через 1 минуту и ​​так далее.

Или есть ли способ вызвать logMail, отправив список сообщений, которые были недавно получены в течение этого периода (1 минута)? Не могли бы вы сообщить мне, как это сделать?


person VGH    schedule 27.05.2020    source источник


Ответы (1)


Увеличьте значение poller maxMessagesPerPoll по умолчанию 1.

person Gary Russell    schedule 27.05.2020
comment
Спасибо :) Я планирую использовать maxMessagesPerPoll (-1), так как не хочу ограничивать количество писем. Пожалуйста, дайте мне знать, если это правильный способ справиться с этим? - person VGH; 28.05.2020
comment
Да; -1 означает бесконечность. - person Gary Russell; 28.05.2020
comment
Спасибо за предложение :) - person VGH; 28.05.2020