Проблемы в интеграции почты Sping приемник простоя - PullRequest
1 голос
/ 22 апреля 2020

Я использую почтовую интеграционную почту для получения почтовых сообщений от нескольких настраиваемых учетных записей.

Я использую 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();

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

Но через некоторое время он перестает записываться. У меня такое ощущение, что это связано с параметрами флага, но я не могу понять, как решить проблему.

Любой совет более чем приветствуется

Спасибо

Angelo

1 Ответ

0 голосов
/ 22 апреля 2020

Пожалуйста, поднимите вопрос о GH здесь https://github.com/spring-projects/spring-integration/issues.

В качестве обходного пути вам может понадобиться подход, предложенный здесь в документах: https://docs.spring.io/spring-integration/docs/5.3.0.M4/reference/html/mail.html#mail - ТХ-син c. Смотри Mover. Я имею в виду, что вам нужно вновь открыть папку, чтобы иметь возможность обрабатывать вложения из сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...