我正在使用spring集成邮件,以便接收来自多个可配置帐户的邮件消息。
我正在使用IMAP服务器和空闲配置
我编写了以下代码:
@Autowired
private IntegrationFlowContext flowContext;
IntegrationFlow flow = null;
String userFlag = confMailIn.getHost() + "_idle_adapter";
ImapIdleChannelAdapterSpec imapIdleChannelAdapterSpec = Mail.imapIdleAdapter(connectionUrl.toString())
.javaMailProperties(javaMailProperties)
.shouldDeleteMessages(deleteMessages)
.shouldMarkMessagesAsRead(markMessagesRead)
.autoStartup(true)
.autoCloseFolder(false)
.userFlag(userFlag)
.id(userFlag)
//.searchTermStrategy(this::notSeenTerm)
.selector(selectFunction);
if (confMailIn.isRichiedeAutenticazione()) {
imapIdleChannelAdapterSpec = imapIdleChannelAdapterSpec.javaMailAuthenticator(new CasellaPostaleAuthenticator(cpd.getIndirizzoMail(), cpd.getUsername(), cpd.getPassword()));
}
flow = IntegrationFlows
.from(imapIdleChannelAdapterSpec)
.handle(message ->{
//Prendo il closable del messaggio e valorizzo i l'elenco di closeale da chiudere
Closeable closeable = StaticMessageHeaderAccessor.getCloseableResource(message);
if( !closeables.containsKey(cpd.getIndirizzoMail()) ) {
closeables.put(cpd.getIndirizzoMail(), closeable);
}
publishMailEvent(message);
})
.get();
flowContext.registration(flow).id(flowId).register();
我将自动关闭文件夹设置为false,因为如果为true,则由于收到FolderClosedException
而无法处理邮件。因此,我收集了所有Closeable
对象,并在Spring上下文关闭时关闭了它们(在最佳方案中……从不:))
到目前为止,一切都很好...我注册了该流,它开始工作。但是我注意到一段时间后它停止接收邮件。我需要重新启动服务,然后它又能工作一段时间了。
工作正常时,我会看到以下日志:
2020-04-20 16:32:57,427 25199841 [scheduling-1] DEBUG o.s.i.mail.ImapIdleChannelAdapter - waiting for mail
2020-04-20 16:32:57,460 25199874 [scheduling-1] INFO o.s.i.mail.ImapMailReceiver - attempting to receive mail from folder [INBOX]
2020-04-20 16:32:57,460 25199874 [scheduling-1] DEBUG o.s.i.mail.ImapMailReceiver - This email server does not support RECENT flag, but it does support USER flags which will be used to prevent duplicates during email fetch. This receiver instance uses flag: imapmail.libero.it_idle_adapter
2020-04-20 16:32:57,476 25199890 [scheduling-1] DEBUG o.s.i.mail.ImapMailReceiver - found 0 new messages
2020-04-20 16:32:57,476 25199890 [scheduling-1] DEBUG o.s.i.mail.ImapMailReceiver - Received 0 messages
2020-04-20 16:32:57,476 25199890 [scheduling-1] DEBUG o.s.i.mail.ImapIdleChannelAdapter - received 0 mail messages
2020-04-20 16:32:57,476 25199890 [scheduling-1] DEBUG o.s.i.mail.ImapIdleChannelAdapter - Task completed successfully. Re-scheduling it again right away.
但是过了一段时间,它就停止了写作。我感觉到它与Flag选项有关,但我不知道如何解决该问题。
任何提示都值得欢迎
谢谢
天使
答案 0 :(得分:0)
请在此处https://github.com/spring-projects/spring-integration/issues提出GH问题。
作为一种解决方法,您可能需要遵循在文档https://docs.spring.io/spring-integration/docs/5.3.0.M4/reference/html/mail.html#mail-tx-sync中此处建议的方法。参见Mover
。我的意思是您需要考虑重新打开该文件夹,以便能够处理邮件中的附件。