用Javamail解析多个邮件的时候,如果个别邮件的附件过大,就会造成OutOfMemery的情况,如下
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71)
at com.sun.mail.pop3.Protocol.multilineCommand(Protocol.java:362)
at com.sun.mail.pop3.Protocol.retr(Protocol.java:237)
at com.sun.mail.pop3.POP3Message.getContentStream(POP3Message.java:115)
at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:60)
at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:259)
at javax.mail.internet.MimeMultipart.getCount(MimeMultipart.java:159)
at com.gdcn.mail.util.Pop3Util.hasAttachment(Pop3Util.java:1148)
at com.gdcn.mail.util.Pop3Util.analysisMessage(Pop3Util.java:774)
at com.gdcn.mail.util.Pop3Util.getMessages(Pop3Util.java:561)
at com.gdcn.mail.util.Pop3Util.main(Pop3Util.java:1338)
原因是JavaMail会将这些Messages读入内存,由于这些邮件包含了附件等等,所以会造成这样的结果。
网上很多都说增加JVM或者Tomcat等的内存,但是这样仍然不能达到预期的效果。或来查阅了相关的文档和网上的结果,发现了解决这个问题的方法,我们只需要在解析完邮件之后增加这句
((POP3Message) message).invalidate(true);
sun有这样的解析
http://java.sun.com/products/javamail/javadocs/com/sun/mail/pop3/POP3Message.html
invalidate
public void invalidate
(boolean invalidateHeaders)
Invalidate the cache of content for this message object, causing
it to be fetched again from the server the next time it is needed.
If invalidateHeaders
is true, invalidate the headers
as well.
Parameters:
invalidateHeaders
- invalidate the headers as well?
这样就很好地将原来读取的message从cache里面擦除了
分享到:
相关推荐
javamail 实例 获取pop3或者imap方式获取邮件信息,配置运行MailHelper即可.
基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统...
使用Java完成的简单邮箱系统,界面由Java Swing实现,具有以下功能: 1、邮件收发等邮箱基本功能 2、可设置黑名单、白名单,并过滤邮件 3、使用朴素贝叶斯算法检测评估邮件是否为垃圾邮件
使用JAVAMail代发邮件 资源源于不但搜索,自由源于不但努力
基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件...
本文描述如何使用James搭建具备一定邮件过滤、邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能。
项目中要求读取指定邮件未读邮件的内容,在网上查了很多资料发现都不行,不是自己想要的,要么是读取最新的,要么是读取第一封邮件,根本就不能读取未读的旧邮件。...java读取未读邮件内容包括附件包含javamail.jar
javamail 回执邮件资料
怎么用JavaMail收取邮件.doc怎么用JavaMail收取邮件.doc
资源包括邮件的发送、邮件的接收、查看邮件总数量和未读邮件数以及查看未读邮件并标记已读,还有我自己编写的简单的文档。希望能帮助需要帮助的筒子们
javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码 查看debug 邮件处理过程发现邮件头没有编译, 内容是base64编码,所以邮箱收不到或者收到的是base64编码后的一堆乱码,
javamail发送邮件实例 javamail 发送邮件 文本编辑器 kindeditor
(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统...
pop3不加密方式收信、imap不加密方式收信、smtp不加密发信、smtp加密发信
JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API
此源码是使用javamail发送邮件,可以实现静默发送邮件,可以发送附件资源等。有相应的使用说明,快捷好用
JavaMail API是一种可选的、能用于读取、编写和发送电子消息的标准扩展包。 本文主要可分为四个部分。第一部分介绍了Javamail邮件系统的意义和现状。第二部分具体介绍了几种相关协议和Javamail API。第三部分主要...
利用JavaMail发送邮件的实例,可以直接运行
Struts2框架,javamail发送邮件,可以直接用main()调用,也可通过tomcat,在IE上运行,比较简单易懂。