我正在使用Spring Integration来读取邮箱中的电子邮件。
如果邮箱凭据不正确,我该如何处理异常?
IntegrationFlow flow = IntegrationFlows
.from(Mail.imapIdleAdapter(imapUrl(mailbox))
.javaMailProperties(p -> p.put("mail.debug", mailbox.isDebug()))
)
.transform(Transformers.fromMail())
.handle(message -> {
sender.sendEmailToQueue(message);
})
.get();
例外:
java.lang.IllegalStateException: Failure in 'idle' task. Will resubmit.
at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:290) ~[spring-integration-mail-4.3.14.RELEASE.jar:4.3.14.RELEASE]
at org.springframework.integration.mail.ImapIdleChannelAdapter$ReceivingTask.run(ImapIdleChannelAdapter.java:241) ~[spring-integration-mail-4.3.14.RELEASE.jar:4.3.14.RELEASE]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) [spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) [spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_101]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_101]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_101]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_101]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: <HOST REMOVED***>, 993; timeout -1
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:733) ~[javax.mail-1.5.6.jar:1.5.6]
at javax.mail.Service.connect(Service.java:366) ~[javax.mail-1.5.6.jar:1.5.6]
at javax.mail.Service.connect(Service.java:246) ~[javax.mail-1.5.6.jar:1.5.6]
at javax.mail.Service.connect(Service.java:195) ~[javax.mail-1.5.6.jar:1.5.6]
at org.springframework.integration.mail.AbstractMailReceiver.connectStoreIfNecessary(AbstractMailReceiver.java:286) ~[spring-integration-mail-4.3.14.RELEASE.jar:4.3.14.RELEASE]
at org.springframework.integration.mail.AbstractMailReceiver.openFolder(AbstractMailReceiver.java:293) ~[spring-integration-mail-4.3.14.RELEASE.jar:4.3.14.RELEASE]
at org.springframework.integration.mail.ImapMailReceiver.waitForNewMessages(ImapMailReceiver.java:158) ~[spring-integration-mail-4.3.14.RELEASE.jar:4.3.14.RELEASE]
at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:271) ~[spring-integration-mail-4.3.14.RELEASE.jar:4.3.14.RELEASE]
... 10 common frames omitted
Caused by: java.net.UnknownHostException: <HOST REMOVED***>
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_101]
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_101]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_101]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_101]
at java.net.Socket.connect(Socket.java:538) ~[na:1.8.0_101]
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:331) ~[javax.mail-1.5.6.jar:1.5.6]
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238) ~[javax.mail-1.5.6.jar:1.5.6]
at com.sun.mail.iap.Protocol.<init>(Protocol.java:123) ~[javax.mail-1.5.6.jar:1.5.6]
at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:126) ~[javax.mail-1.5.6.jar:1.5.6]
at com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:756) ~[javax.mail-1.5.6.jar:1.5.6]
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:691) ~[javax.mail-1.5.6.jar:1.5.6]
... 17 common frames omitted
我调查过: https://docs.spring.io/spring-integration/reference/html/configuration.html#namespace-errorhandler
Spring Integration代码非常广泛,并且对它来说是新的。有点压倒性的。
任何建议都将不胜感激。
谢谢!
答案 0 :(得分:1)
向上滚动至this section of the documentation上方的注释。
从3.0版本开始,IMAP空闲适配器在发生异常时发出应用程序事件(特别是ImapIdleExceptionEvent)。
将ApplicationListener<ImapIdleExceptionEvent>
bean添加到您的应用程序以接收这些事件(或@EventListener
方法)。