email - Sping 集成邮件空闲入站适配器中的问题
问题描述
我们使用 int-mail:imap-idle-channel-adapter 从 ALIYUN emailBox 获取电子邮件。spring 集成版本是 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 中获取任何电子邮件,它只会获取一批电子邮件并再次停止。
我们还打开邮件调试日志,在特殊情况下,邮箱中有几封看不见的电子邮件,但适配器无法获取它们,搜索结果[UNSEEN 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
重新启动相关流程后,将成功提取未查看的电子邮件。搜索结果[UNSEEN 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)
......
关于这个问题的任何想法?这个问题是由电子邮件服务器或 spring 集成配置错误调用的?谁能给点建议?
解决方案
推荐阅读
- python - 'DataFrame' 对象没有属性 'value_counts' 为什么会这样?
- wolfram-mathematica - 线程未正确应用于定义的模块
- cypress - 为 cypress 测试安装 .circleci/config.yml 的 npm 命令是什么
- c# - 网格分页的每页行数如何影响网站性能?
- c# - 在 c# Xamarin 中等待带有弹出窗口的任务
- spring-boot - CrudRepository 在用户登录时抛出数据不匹配
- pentaho-spoon - 将一些汇总数据记录到执行结果窗口
- python-3.x - TypeError:draw()缺少1个必需的位置参数:'win'
- flutter - 如何根据 Flutter 中的主题更改导航和状态栏颜色?
- c++ - 如何将 .csv 文件的元素存储到 C++ 中的二维向量中?