请帮助我解决这个异常。我在Spring Boot Java应用程序中运行这个IMAP电子邮件监听器,以从我的gmail收件箱中检索电子邮件。
return IntegrationFlows
.from(Mail.imapIdleAdapter(imapUrl())
.autoStartup(true)
.javaMailProperties(p -> p.put("mail.imap.ssl.trust", "*")
.put("mail.imap.ssl.enable", "true"))
.shouldMarkMessagesAsRead(false)
.shouldDeleteMessages(false)
.shouldReconnectAutomatically(true)
.autoCloseFolder(false))
.handle(m-> myService.process(MimeMessage))
.get();
偶尔我在更高的环境中会得到以下异常
javax.mail.FolderClosedException: * BYE JavaMail Exception:
javax.net.ssl.SSLException: Connection timed out (Read failed)
at com.sun.mail.imap.IMAPFolder.handleIdle(IMAPFolder.java:3316)
导致
2020-05-20 18:06:27.264 WARN 1 --- [ask-scheduler-1] o.s.i.mail.ImapIdleChannelAdapter : Failed to execute IDLE task. Will attempt to resubmit in 10000 milliseconds.
我想知道你会建议如何处理这个问题? 通过用'mail.timeout'属性戳破gmail服务器?还是有其他推荐的方法?再次感谢您
参见Max的评论。我同意:这真的是正常的,我们得到一个连接丢失.看到那个警告信息。
执行IDLE任务失败。将在10000毫秒后尝试重新提交。
而且它的逻辑是这样的。
this.receivingTask = scheduler.schedule(new ReceivingTask(), this.receivingTaskTrigger);
...
private class ReceivingTask implements Runnable {
ReceivingTask() {
}
@Override
public void run() {
if (isRunning()) {
try {
ImapIdleChannelAdapter.this.idleTask.run();
logger.debug("Task completed successfully. Re-scheduling it again right away.");
}
catch (Exception e) { //run again after a delay
if (logger.isWarnEnabled()) {
logger.warn("Failed to execute IDLE task. Will attempt to resubmit in "
+ ImapIdleChannelAdapter.this.reconnectDelay + " milliseconds.", e);
}
ImapIdleChannelAdapter.this.receivingTaskTrigger.delayNextExecution();
publishException(e);
}
}
}
}