javamail 循环解析内容时 爆出错误:
11:45:51,894 ERROR [STDERR] javax.mail.internet.ParseException: Expected ';', got "filename"
11:45:51,894 ERROR [STDERR]  at javax.mail.internet.ParameterList.<init>(ParameterList.java:281)
11:45:51,894 ERROR [STDERR]  at javax.mail.internet.ContentDisposition.<init>(ContentDisposition.java:100)
11:45:51,894 ERROR [STDERR]  at javax.mail.internet.MimeBodyPart.getDisposition(MimeBodyPart.java:1085)
11:45:51,910 ERROR [STDERR]  at javax.mail.internet.MimeBodyPart.getDisposition(MimeBodyPart.java:318)
 eml 格式码:
Content-Type: application/msword;
 name="=?gbk?B?s8m5prXEz/rK27K91ui6zdKqy9guZG9j?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="=?gbk?B?s8m5prXEz/rK27K91ui6zdKqy9guZG9j?="
在通过
 Multipart mp = (Multipart) part.getContent();
 for (int i = 0; i < mp.getCount(); i++) {
 System.out.println("mp.getCount()"+mp.getCount());
 BodyPart mpart = mp.getBodyPart(i);

 String disposition = mpart.getDisposition();
获得内容
Content-Disposition: attachment\r\n        filename="4.3±¨¼Û±í.doc"  
由于mpart.getDisposition(); 返回String 类型 而内容似乎是个 k/v 直接报错ParseException: Expected ';', got "filename"  (意外出现; 获取到filename) 感觉是格式问题..

解决方案 »

  1.   

    这个我记得是part有个disposition属性,如果是附件或者内联文件,就会有filename属性可LZ你那的disposition取出来就是这个?
    Content-Disposition: attachment\r\n filename="4.3±¨¼Û±í.doc" 不过怎么会有\r\n也列出来呢
      

  2.   

    \r\n 转义后是; disposition 获得的是 attmatchment; filename="xxxxx" ;
      

  3.   

    那一段我都忘了我怎么写
    我只记得可以知道是一个附件还是一个内联文件还是都不是,然后如果是附件或内联的话,可以获得filename以上这些都是通过javamail操作,都没什么问题
      

  4.   

    问题解决方案:
    问题的关键是 attachment\r\n  filename="fadfa.doc"
    中少了一个报错中的东西 ";" 正常情况下 该句应该是 attachment;\r\n  filename="fadfa.doc"
    多了一个; 所以在获取 disposition 时报错 ,处理方法是将该错捕获用try{}catch(parseExceptino e){ /** 这里没有写任何东西直接放过去**/},因为,在我们获得content-type中 也会获得name 即 附件的名称.所以这只是一个邮件格式错误,不影响邮件本身..