Java прослушиватель почты с использованием Spring Integration - PullRequest
0 голосов
/ 28 мая 2020

Я использую приведенный ниже код в приложении 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:pwd@mail.company.com/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 (скажем, каждые 1 минуту), сколько новых писем пришло, столько раз logMail должен быть выполнен путем передачи новой почты в качестве аргумента (перед следующим опросом). Но этого не происходит. Метод logMail вызывается только один раз на Pollers.fixedRate (каждую 1 минуту), следовательно, обрабатывается только одно письмо. Если я получил, скажем, 3 письма за последнюю 1 минуту, 1-е письмо будет обработано сейчас. 2-е письмо будет обработано через 1 минуту и ​​так далее.

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

1 Ответ

1 голос
/ 28 мая 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...