Java IMAP在大邮箱中提取邮件性能优化

时间:2016-05-11 10:40:09

标签: java email javamail imap fetch

我正在使用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,使用ENVELOPEFLAGS

最后,你的意见是什么: 处理邮件正文的内容以优化性能?我认为对于规模小于100K的邮件,我们可能会使用getContent()但是应该应用大邮件InputStream

0 个答案:

没有答案