Spring Integration - Обработка ошибок соединения Imap - PullRequest
0 голосов
/ 28 мая 2018

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

Любой совет будет принят с благодарностью.

Спасибо!

1 Ответ

0 голосов
/ 28 мая 2018

Прокрутите до примечания чуть выше этого раздела документации .

Начиная с версии 3.0, адаптер ожидания IMAP выдает события приложения (в частности, ImapIdleExceptionEvent), когдаисключения происходят.

Добавьте бин ApplicationListener<ImapIdleExceptionEvent> в ваше приложение для получения этих событий (или метод @EventListener).

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