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

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

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强制转换java.lang.String cannot be cast to java.io.InputStream ()返回一个字符串作为Internet上的示例。

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

谢谢。

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

就我而言,我正在构建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方法获得了正确解码的内容。 在这个页面上找到了线索。

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

使用这段代码…..根据你的需要修改….你不需要做类型转换。

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