Я использую приведенный ниже код в приложении 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 минута)? Не могли бы вы сообщить мне, как это сделать?