Javamail - 收到邮件后立即接收

Javamail - Pick up the email as soon as it arrives

我正在使用 Javamail 从我的 IMAP 电子邮件帐户中获取一些邮件。它运作良好,但有时电子邮件不会在服务器的同一时间到达。

我该如何解决?

您可以像这样监控一个文件夹
来自 here

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
folder.addMessageCountListener(new MessageCountAdapter() {
    public void messagesAdded(MessageCountEvent ev) {
        Folder folder = (Folder)ev.getSource();
        Message[] msgs = ev.getMessages();
        System.out.println("Folder: " + folder +
            " got " + msgs.length + " new messages");
        try {
            // process new messages
            idleManager.watch(folder); // keep watching for new messages
        } catch (MessagingException mex) {
            // handle exception related to the Folder
        }
    }
});
idleManager.watch(folder);

您受制于服务器以及它通知客户端新消息的时间。

另请注意,如果您闲置 30 分钟(通常),服务器将关闭您的连接,您需要重新连接。如果你想保持连接打开,你应该定期做一些事情,比如 folder.getMessageCount(),这会让你脱离 IMAP IDLE 状态,并告诉服务器你仍在使用连接,重置空闲状态超时。

当然,由于这是一个网络,连接可能会因许多您无法避免的其他原因而中断,因此您始终需要准备好处理断开的连接。