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
。
我在 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
。