我正在使用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上正确运行或以任何方式避免此问题并获取部件的内容。
感谢。
答案 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时应该打包以下文件:
修复之后,我只是从getContent
方法获得了正确解码的内容。线索在this page上找到。