我们使用带有imap的java mail api并获取包含数百万条消息的文件夹的消息。有一些规则和限制:
我们没有始终打开与邮件服务器的连接,因此我们无法添加侦听器。
消息将存储在本地数据库中,包含所有属性,主题,正文,接收日期等。
无法使用多线程
为了将性能保持在可接受的水平并防止内存崩溃,我正在计划:
1.在初始提取期间,必须提取所有消息,仅存储消息标题并绕过正文和附件。在客户要求时,将完成获取消息的正文和附件。初始化可能需要数小时,这不是问题。
2.在开始时获取所有消息时,使用适当的获取配置文件使其更快,但以块为单位进行处理,例如:
Message m1[] = f.getMessages(1, 10000);
f.fetch(m1, fp);
//process m1 array
Message m2[] = f.getMessages(10001, 20000);
f.fetch(m2, fp);
//process m2 array
而不是
Message m_all[] = f.getMessages(1, NUMALLMESSAGES);
f.fetch(m_all, fp);
//process m_all array, may throw out of memory errors
3.在我们收到所有消息后,将最近消息的UID存储在数据库中并在下一次获取执行时:
f.getMessagesByUID(LASTUIDREADFROMDB, UIDMAX)
您是否有其他建议,或者看到我们需要关注的任何要点(记忆,表现)