不同操作系统下JavaMail中part.getContent的类型是什么?

时间:2011-08-13 12:57:11

标签: java macos javamail

我正在使用JavaMail接收邮件。 起初,我是在Mac OS X下开发的。我从互联网上找到的例子如下:

public void getMailContent(Part part) throws Exception {   
        String contenttype = part.getContentType();   
        int nameindex = contenttype.indexOf("name");   
        boolean conname = false;   
        if (nameindex != -1)   
            conname = true;   
        System.out.println("CONTENTTYPE: " + contenttype);   
        if (part.isMimeType("text/plain") && !conname) {   
            bodytext.append((String) part.getContent());   
        } else if (part.isMimeType("text/html") && !conname) {   
            bodytext.append((String) part.getContent());   
        } else if (part.isMimeType("multipart/*")) {   
            Multipart multipart = (Multipart) part.getContent();   
            int counts = multipart.getCount();   
            for (int i = 0; i < counts; i++) {   
                getMailContent(multipart.getBodyPart(i));   
            }   
        } else if (part.isMimeType("message/rfc822")) {   
            getMailContent((Part) part.getContent());   
        } else {}   
    }

但我发现它不起作用。返回值是InputStream的扩展。 所以我用它来解决问题。

InputStreamReader isr = new InputStreamReader((InputStream) part.getContent(), language);
BufferedReader br = new BufferedReader(isr);
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
    sb.append(line).append("\n");
 }
result = MimeUtility.decodeText(sb.toString());

但是最近,我得到了一台新电脑并在Windows 7下运行上面的代码,它也不起作用。例外是java.lang.String cannot be cast to java.io.InputStream。part.getContent()返回一个String作为互联网上的例子

我只是不知道原因。如何在mac和windows上正确运行或以任何方式避免此问题并获取部件的内容。

感谢。

3 个答案:

答案 0 :(得分:0)

Scanner sc=new Scanner(contenttype);
    while(sc.hasNext()){
        sc.next();
    }

使用这段代码.....根据您的需要进行修改....而且您不需要进行类型转换。

答案 1 :(得分:0)

我使用instanceof解决了我自己的问题,但我仍然不知道为什么会这样。

答案 2 :(得分:0)

我遇到了同样的问题,找到了原因(虽然,我想,这不一定是可能导致问题的唯一原因),并修复了它,所以我决定发布解决方案。

就我而言,我正在构建Android应用程序。在Android中,javax.security包中缺少某些类,因此使用了asmack帮助程序包,并且已经从源代码构建了JavaMail库。

问题是,我没有将所需资源打包到javamail jar中。具体来说,导出jar时应该打包以下文件:

  • dsn.mf
  • javamail.charset.map
  • javamail.default.address.map
  • javamail.default.providers
  • javamail.imap.provider
  • javamail.pop3.provider
  • javamail.smtp.address.map
  • javamail.smtp.provider
  • 的mailcap

修复之后,我只是从getContent方法获得了正确解码的内容。线索在this page上找到。