使用Spring Integration的Java邮件监听器

问题描述 投票:0回答:1

我在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(每隔1分钟说一遍)有多少新邮件到达,logMail应该通过将新邮件作为参数传递来执行多次(在下一次轮询之前),但这没有发生。 logMail方法每个Pollers.fixedRate(每1分钟)仅被调用一次,因此仅处理一封邮件。如果我在过去1分钟内收到说3封邮件,则现在将处理第一封邮件。第二封邮件将在接下来的1分钟内处理,依此类推。

或者通过发送在该时间段(1分钟)内新到达的消息列表可以调用logMail的任何方法吗?请让我知道如何做吗?

java spring-integration javamail spring-dsl
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.