我正在使用java mail API来获取大邮箱(例如5000封邮件)中的所有邮件,其中包含所有邮件属性(正文,标题,附件等)的IMAP并存储在数据库中。与
一起使用FetchProfile时profile.add(IMAPFolder.FetchProfileItem.MESSAGE);
整个过程很快完成,但因为我们使用MESSAGE作为获取配置文件,当消息数组的大小很大时,存在这个块的内存不足的危险:
Message[] messages = folder.getMessagesByUID(1, Long.MAXVALUE);
// line which may cause OutOfMemory
folder.fetch(messages, profile);
选项1:
调用
时按部分获取消息folder.getMessagesByUID(1, 1000);
folder.fetch(messages, profile);
// Iterate the messages array, process first 1000 messages
// store in the db and call
message.invalidateHeaders();
// Handle next block
folder.getMessagesByUID(1001, 2000);
folder.fetch(messages, profile);
选项2:
或者根本不使用FetchProfileItem.MESSAGE
,使用ENVELOPE
和FLAGS
?
最后,你的意见是什么:
处理邮件正文的内容以优化性能?我认为对于规模小于100K的邮件,我们可能会使用getContent()
但是应该应用大邮件InputStream
?