今天用javamail收取imap类型的电子邮件时发现在调用msg.getContent()总是抛出例外,查找了网上,发现没有人说到这个问题,后来调试了一下源码,发现是javamail对返回的数据解析有问题,当设置fetchsize时,返回的数据格式javamail解析出错了,javamail只进行了对返回格式是 * 1 FETCH (BODY[TEXT] {148549} 的数据,如是有fetchsize(缺省是有的,所以导致我的程序出错了),则返回的是 * 1 FETCH (BODY[TEXT] {0.148549} ,因此原因找到后,解决方式就出来了,1、更改javamail源码 2、使fetchsize(一次取数据的大小)不起作用。为了简单起见,采用了第2种处理方式,只要在开始初始化时增加mail.imap.partialfetch属性为false就行了,这个参数用来指定fetchsize起不起作用。例子:
Properties prop = new Properties();
prop.put("mail.imap.host", site);
prop.put("mail.imap.partialfetch", false);
prop.put("mail.store.protocol", "imap");
Session session = Session.getDefaultInstance(prop);
问题解决。
Properties prop = new Properties();
prop.put("mail.imap.host", site);
prop.put("mail.imap.partialfetch", false);
prop.put("mail.store.protocol", "imap");
Session session = Session.getDefaultInstance(prop);
问题解决。