gpt4 book ai didi

java - Imap 空闲(假)不接收所有电子邮件

转载 作者:行者123 更新时间:2023-12-01 14:49:03 27 4
gpt4 key购买 nike

我尝试实现一个邮件服务器,使用 sun IMAPFolder 和空闲命令解析传感器发送的电子邮件。

不幸的是,空闲状态在30分钟后关闭并抛出FolderClosedException。为了模拟在空闲重新启动时收到电子邮件的最坏情况,我在异常正文中发送了一封测试电子邮件,看看该电子邮件是否已得到处理。

我的代码:

public void run() {
try {
Properties props = System.getProperties();
props.setProperty("mail.imap.connectiontimeout", "5000");
props.setProperty("mail.imap.timeout", "5000");



for(;;) {
try {
Session session = Session.getInstance(props, null);
Store store = session.getStore("imap");
store.connect("localhost", "test@email.db.de", "testpw1");
Folder folder = store.getFolder("inbox");

if ((folder == null) || !folder.exists()) {
logger.error("folder -inbox- is invalid.");
return;
}

folder.open(Folder.READ_WRITE);

// Add messageCountListener to listen for new messages
folder.addMessageCountListener(new MessageCountAdapter() {
@Override
public void messagesAdded(MessageCountEvent event) {
Message[] messages = event.getMessages();
processMessages(messages);
}
});

logger.debug("idle start");
IMAPFolder f = (IMAPFolder) folder;
f.idle(); //idle state

} catch (FolderClosedException ex) {
logger.info("idle timeout");
long time = Calendar.getInstance().getTimeInMillis();
DateFormat df = DateFormat.getDateTimeInstance();
SendEmail.send("test@email.db.de", "TestSubject", "This mail is sent when idle is off" + df.format(new Date(time));
} catch (Exception ex) {
ex.printStackTrace();
}
}//endfor

} catch (Exception ex) {
ex.printStackTrace();
}
}

不幸的是,我得到两个不同的输出,但我不知道为什么。

有时电子邮件会被处理:

02/25/2013 11:45:04.202 DEBUG [Thread-0]    logger     - idle start
02/25/2013 12:15:04.202 INFO [Thread-0] logger - idle timeout
This mail is sent when idle is off 25.02.2013 12:15:04
02/25/2013 12:15:04.235 DEBUG [Thread-0] logger - idle start
Got 1 new messages
02/25/2013 12:15:04.267 DEBUG [Thread-0] logger - idle start

有时不是:

02/25/2013 10:41:28.895 DEBUG [Thread-0]    logger     - idle start
02/25/2013 11:11:28.898 INFO [Thread-0] logger - idle timeout
This mail is sent when idle is off 25.02.2013 11:11:28
02/25/2013 11:11:28.962 DEBUG [Thread-0] logger - idle start

我的目标是不再抛出folderClosedException,或者始终处理catch 正文中的电子邮件。

我怎样才能实现这个目标?为什么我这里有两种类型的输出?

提前致谢。

最佳答案

IDLE仅持续30分钟。之后,远程服务器可以关闭您的 TCP 连接。连接关闭后,您将看不到新电子邮件。 (但是当您重新连接时,您应该能够通过比较 EXISTS 计数和 UID 来获取它)。

更好的做法是在大约 29 分钟时中断 IDLE,并在服务器关闭您的 TCP 连接之前重新建立它。

您仍然应该处理连接中断,因为发生这种情况的原因有很多。

关于java - Imap 空闲(假)不接收所有电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15066415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com