我正在使用javamail (1.5.5)
从交易所2010 server
获取邮件。它无法获取少量消息(java.lang.OutOfMemoryError: Java heap space
)。但是在使用java mail api 1.4.5
且没有堆空间错误的情况下,它可以正常工作。
奇怪的是,该特殊消息的大小为136516字节。因此,在使用IMAP时,应在9批中提取(默认提取大小为16KB)。但是从下面提到的调试跟踪中,有些奇怪。
这是我的代码:
Message messObj = message[i]; String messSubject = null;
String messMsgId = null;
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
messObj.writeTo(bos);
bos.close();
javax.mail.util.SharedByteArrayInputStream bis = new javax.mail.util.SharedByteArrayInputStream(bos.toByteArray());
MimeMessage cmsg = new MimeMessage(session, bis);
bis.close(); mp.setMessage(cmsg);
messSubject = cmsg.getSubject();
messMsgId = ((MimeMessage) cmsg).getMessageID();
System.out.println("debugging:::subject::"+messSubject+"::msgid::"+messMsgId);
标志(\ Seen \ Answered))| [14:48:21:205] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:A3893 OK FETCH 完成。| [14:48:21:205] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:A3894 FETCH 1(BODY [] <536512690.16384>)| [14:48:21:220] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:* 1个FETCH(UID 91149 身体[] {137921} |
标志(\ Seen \ Answered))| [14:48:21:236] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:A3894 OK FETCH 完成。| [14:48:21:236] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:A3895 FETCH 1(BODY [] <536650611.16384>)| [14:48:21:251] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:* 1个FETCH(UID 91149 身体[] {137921} |
-5c3ef07b8737170331214bb435ce7be6-- | [14:48:21:267] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:标志(\ Seen \已回答))| [14:48:21:267] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:A3895 OK FETCH完成。 [14:48:21:267] | [09-26-2018] | [SYSOUT] | [INFO] | [73]: A3896 FETCH 1(BODY [] <536788532.16384>)| [14:48:21:283] | [09-26-2018] | [SYSOUT] | [INFO] | [73]:* 1个FETCH(UID 91149 身体[] {137921} |
在系统打印之前发生错误。每次获取整个消息并将其提取3896次(在发生内存堆错误并停止进程之后)。有人可以告诉我我在这里想念什么吗?