проблема в адаптере входящей почты интеграции Sping - PullRequest
0 голосов
/ 10 июля 2020

мы используем int-mail: imap-idle-channel-adapter для получения писем из почтового ящика ALIYUN. версия весенней интеграции - 5.3.1. Конфигурация адаптера выглядит следующим образом:

    <int-mail:inbound-channel-adapter id="mailAdapter"
                                    store-uri="imaps://XXX%40weikayun.com:***@imap.mxhichina.com/INBOX"
                                    channel="InboundChannel"
                                    auto-startup="true"
                                    should-delete-messages="false"
                                    should-mark-messages-as-read="true"
                                    search-term-strategy="unseenSearchTermStrategy"
                                    java-mail-properties="javaMailProperties"
                                    simple-content="true">
    <int:poller max-messages-per-poll="4" fixed-rate="30000"/>
</int-mail:inbound-channel-adapter>

Конфигурация javaMailProperties выглядит следующим образом:

    <util:properties id="javaMailProperties">
    <prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
    <prop key="mail.imap.socketFactory.fallback">false</prop>
    <prop key="mail.store.protocol">imaps</prop>
    <prop key="mail.transport.protocol">smtps</prop>
    <prop key="mail.smtps.auth">true</prop>
    <prop key="mail.debug">false</prop>
    <prop key="mail.smtp.starttls.enable">false</prop>
    <prop key="mail.imaps.timeout">300000</prop>
</util:properties>

но в последнее время мы всегда получаем исключения "FolderClosedException" следующим образом:

ImapIdleChannelAdapter: - error occurred in idle task
javax.mail.FolderClosedException: * BYE JavaMail Exception: java.io.IOException: Connection dropped by server?
at com.sun.mail.imap.IMAPFolder.handleIdle(IMAPFolder.java:3199) ~[javax.mail-1.5.5.jar!/:1.5.5]
at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:3043) ~[javax.mail-1.5.5.jar!/:1.5.5]
at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:2995) ~[javax.mail-1.5.5.jar!/:1.5.5]
at org.springframework.integration.mail.ImapMailReceiver.waitForNewMessages(ImapMailReceiver.java:197) ~[spring-integration-mail-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:277) ~[spring-integration-mail-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.integration.mail.ImapIdleChannelAdapter$ReceivingTask.run(ImapIdleChannelAdapter.java:249) ~[spring-integration-mail-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) ~[spring-context-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_131]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_131]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_131]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_131]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]

ImapIdleChannelAdapter: - Failed to execute IDLE task. Will attempt to resubmit in 10000 milliseconds.
java.lang.IllegalStateException: Failure in 'idle' task. Will resubmit.
at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:295) ~[spring-integration-mail-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.integration.mail.ImapIdleChannelAdapter$ReceivingTask.run(ImapIdleChannelAdapter.java:249) ~[spring-integration-mail-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) ~[spring-context-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_131]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_131]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_131]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_131]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]
Caused by: javax.mail.FolderClosedException: * BYE JavaMail Exception: java.io.IOException: Connection dropped by server?
at com.sun.mail.imap.IMAPFolder.handleIdle(IMAPFolder.java:3199) ~[javax.mail-1.5.5.jar!/:1.5.5]
at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:3043) ~[javax.mail-1.5.5.jar!/:1.5.5]
at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:2995) ~[javax.mail-1.5.5.jar!/:1.5.5]
at org.springframework.integration.mail.ImapMailReceiver.waitForNewMessages(ImapMailReceiver.java:197) ~[spring-integration-mail-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:277) ~[spring-integration-mail-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
... 10 more

после этого никакие электронные письма не могут быть получены из emailBox, пока мы не перезапустим связанный процесс, он просто получит один пакет писем и снова остановится.

мы также открываем журнал отладки почты, в исключительном случае, там несколько невидимых писем в почтовом ящике, но адаптер не может их получить, результат поиска [НЕ ВИДЕТЬ 0], полные журналы выглядят следующим образом:

DEBUG IMAPS: added an Authenticated connection -- size: 1
DEBUG IMAPS: IMAPProtocol noop
A279 NOOP
A279 OK NOOP completed
A280 LIST "" INBOX
* LIST () "/" "INBOX"
A280 OK LIST completed
DEBUG IMAPS: connection available -- size: 1
* 0 EXISTS
* 0 RECENT
* OK [UNSEEN 0]
* OK [UIDNEXT 0] Predicted next UID.
* OK [UIDVALIDITY ] UIDs valid.
* FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
* OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited.
A281 OK [READ-WRITE] SELECT completed
A282 SEARCH UNSEEN ALL
* SEARCH
A282 OK SEARCH completed
A283 IDLE
+ idling
DEBUG IMAP: startIdle: set to IDLE
DEBUG IMAP: startIdle: return true

После перезапуска связанного потока невидимые электронные письма будут успешно получены. результат поиска [НЕ ВИДЕТЬ 8], полные журналы выглядят следующим образом:

DEBUG IMAPS: LOGIN command result: A1 OK LOGIN completed
A2 CAPABILITY
* CAPABILITY IMAP4rev1 IDLE XLIST UIDPLUS ID SASL-IR AUTH=XOAUTH AUTH=EXTERNAL
A2 OK CAPABILITY completed
DEBUG IMAPS: AUTH: XOAUTH
DEBUG IMAPS: AUTH: EXTERNAL
A3 LIST "" INBOX
* LIST () "/" "INBOX"
A3 OK LIST completed
DEBUG IMAPS: connection available -- size: 1
A4 SELECT INBOX
* 18127 EXISTS
* 0 RECENT
* OK [UNSEEN 8]
* OK [UIDNEXT 564053] Predicted next UID.
* OK [UIDVALIDITY 2] UIDs valid.
* FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
* OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited.
A4 OK [READ-WRITE] SELECT completed
A5 SEARCH UNSEEN ALL
* SEARCH 18120 18121 18122 18123 18124 18125 18126 18127
A5 OK SEARCH completed
A6 SEARCH UNSEEN ALL
* SEARCH 18120 18121 18122 18123 18124 18125 18126 18127
A6 OK SEARCH completed
A7 FETCH 18120:18127 (ENVELOPE INTERNALDATE RFC822.SIZE FLAGS BODYSTRUCTURE)
......

Есть идеи по этой проблеме? эта проблема вызвана почтовым сервером или ошибкой конфигурации весенней интеграции? может кто-нибудь дать совет?

...