Java 使用 Spring 集成的邮件侦听器

Java mail listener using 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: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 分钟)仅调用一次,因此只有一封邮件收到 processed.If 我在过去 1 分钟内收到了 3 封邮件,现在将处理第一封邮件。第二封邮件将在接下来的 1 分钟内处理,依此类推。

或者有什么方法可以通过发送在该时间段(1 分钟)内新到达的消息列表来调用 logMail?请问您能告诉我该怎么做吗?

将轮询器从默认值 1 增加 maxMessagesPerPoll