我在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的任何方法吗?请让我知道如何做吗?
将轮询器maxMessagesPerPoll
从默认值1增加。