Случайно получаю javax.mail.FolderClosedException в моем приложении - PullRequest
0 голосов
/ 04 октября 2019

Мое почтовое приложение время от времени отключается из-за javax.mail.FolderClosedException.

Через некоторое время оно возвращается к нормальному attempting to receive mail from folder [INBOX] ..., а затем через несколько часов оно снова включается.

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

Есть идеи, как решить эту проблему?

Ниже приведены журналы ошибок, которые яобычно получают по этому вопросу

2019-10-04 02:54:02 - attempting to receive mail from folder [INBOX]
2019-10-04 02:57:02 - error occurred in idle task
javax.mail.FolderClosedException: * BYE JavaMail Exception: java.net.SocketException: Connection reset
    at com.sun.mail.imap.IMAPFolder.handleIdle(IMAPFolder.java:3316)
    at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:3159)
    at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:3111)
    at org.springframework.integration.mail.ImapMailReceiver.waitForNewMessages(ImapMailReceiver.java:175)
    at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:287)
    at org.springframework.integration.mail.ImapIdleChannelAdapter$ReceivingTask.run(ImapIdleChannelAdapter.java:253)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
2019-10-04 02:57:02 - 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:306)
    at org.springframework.integration.mail.ImapIdleChannelAdapter$ReceivingTask.run(ImapIdleChannelAdapter.java:253)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.mail.FolderClosedException: * BYE JavaMail Exception: java.net.SocketException: Connection reset
    at com.sun.mail.imap.IMAPFolder.handleIdle(IMAPFolder.java:3316)
    at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:3159)
    at com.sun.mail.imap.IMAPFolder.idle(IMAPFolder.java:3111)
    at org.springframework.integration.mail.ImapMailReceiver.waitForNewMessages(ImapMailReceiver.java:175)
    at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:287)
    ... 10 common frames omitted
2019-10-04 02:58:59 - attempting to receive mail from folder [INBOX]

Конфигурация почты:

@Bean
@Qualifier(value = "imapMailFlow")
public IntegrationFlow imapMailFlow() throws UnsupportedEncodingException {
    ImapIdleChannelAdapterSpec imapIdleChannelAdapterSpec = Mail.imapIdleAdapter(getImapMailReceiver());
    return IntegrationFlows.from(imapIdleChannelAdapterSpec).channel("myChannel").get();
}

private ImapMailReceiver getImapMailReceiver() throws UnsupportedEncodingException {
    String user = URLEncoder.encode(m_userEmail, ConstantUtil.CHARACTER_ENCODING);
    String password = URLEncoder.encode(m_emailPassword, ConstantUtil.CHARACTER_ENCODING);
    String url = "imaps://" + user + ":" + password + "@imap.gmail.com:993/inbox";
    Properties props = new Properties();
    props.put(PROPERTY_MAIL_SOCKET_FACTORY_CLASS, m_mailSocketFactoryClass);
    props.put(PROPERTY_MAIL_SOCKET_FACTORY_FALLBACK, m_mailSocketFactoryFallback);
    props.put(PROPERTY_MAIL_STORE_PROTOCOL, m_mailStoreProtocol);
    setMailCommonProperties(props);
    ImapMailReceiver imapMailReceiver = new ImapMailReceiver(url);
    imapMailReceiver.setCancelIdleInterval(m_mailCancelIdleInterval);
    imapMailReceiver.setJavaMailProperties(props);
    imapMailReceiver.setShouldMarkMessagesAsRead(true);
    imapMailReceiver.setShouldDeleteMessages(false);
    imapMailReceiver.setSimpleContent(true);
    imapMailReceiver.setMaxFetchSize(m_mailMaxFetchSize);
    return imapMailReceiver;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...