JavaMail IdleManager抛出"文件夹没有使用SocketChannels"一段时间后的异常

时间:2017-02-23 04:24:03

标签: scala gmail javamail socketchannel

我在Scala中使用IdleManager来收听Gmail文件夹。

我已经有props.setProperty("mail.imaps.usesocketchannels", "true")

我的代码的主要部分是这样的:

  folder.addMessageCountListener(new MessageCountAdapter() {
    override def messagesAdded(ev: MessageCountEvent) {
      Logger.info("Got " + ev.getMessages.length + " new messages")
      idleManager.watch(folder)
    }
  })

  // timeLength = 20 minutes
  system.scheduler.schedule(initialDelay = timeLength, interval = timeLength) {
    try {
      folder.asInstanceOf[IMAPFolder].doCommand(new IMAPFolder.ProtocolCommand() {
        def doCommand(p: IMAPProtocol) = {
          p.simpleCommand("NOOP", null)
          null
        }
      })
      Logger.debug("Continue after sending NOOP")
      idleManager.watch(folder)
    } catch {
      case e: Exception => Logger.error(s"MailHelper: ${e.getMessage}")
    }
  }

  idleManager.watch(folder)

您可以看到我在收到新消息后以及发送NOOP命令后让idleManager继续观看该文件夹。创建scheduler以定期(当前,在20分钟内一次)向服务器发送NOOP命令以保持连接。我的程序工作正常,但只是一段时间。

第一次通话idleManager.watch(folder)后14小时,收到上一封电子邮件后大约12.5小时,我仍然得到了日志Continue after sending NOOP,但在此之后是错误日志MailHelper: Folder is not using SocketChannels。< / p>

你能帮帮我吗?

编辑: 谢谢@BillShannon的快速回复。我已从v1.5.2更新到v1.5.6并打开了调试输出。我确定了Properties对象和&#34; store&#34;实例(使用&#34; imaps&#34;协议创建的会话)不变。

错误再次出现。调用idleManager.watch(folder)后,这是日志([文件夹]是我文件夹的imaps协议字符串)

DEBUG IMAP: IdleManager watching [folder]
A385 IDLE
+ idling
DEBUG IMAP: startIdle: set to IDLE
DEBUG IMAP: startIdle: return true
DEBUG IMAP: IdleManager.watch startIdle succeeded for [folder]
DEBUG IMAP: IdleManager selected 0 channels
DEBUG IMAP: IdleManager adding [folder] to selector
DEBUG IMAP: IdleManager waiting...
DEBUG IMAP: IdleManager selected 1 channels
DEBUG IMAP: IdleManager selected folder: [folder]
DEBUG IMAP: handleIdle: set to RUNNING
DEBUG IMAP: IdleManager got exception for folder: [folder], THROW: 
javax.mail.FolderClosedException: * BYE JavaMail Exception: java.io.IOException: Connection dropped by server?
    at com.sun.mail.imap.IMAPFolder.handleIdle(IMAPFolder.java:3199)
    at com.sun.mail.imap.IdleManager.processKeys(IdleManager.java:370)
    at com.sun.mail.imap.IdleManager.select(IdleManager.java:281)
    at com.sun.mail.imap.IdleManager.access$200(IdleManager.java:137)
    at com.sun.mail.imap.IdleManager$1.run(IdleManager.java:164)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
DEBUG IMAP: IdleManager waiting...
20分钟后,程序发出了另一个&#34; NOOP&#34;,返回的状态为&#34; OK&#34;。该程序再次调用idleManager.watch(folder),此处错误日志重新出现Folder is not using SocketChannels

你还需要什么吗?这是图书馆的问题吗?

0 个答案:

没有答案