我正在使用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
。part.getContent()返回一个String作为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
邮件盖
修复之后,仅从getContent
方法就可以正确解码内容。在this page上找到了线索。
关于java - 不同操作系统下JavaMail中part.getContent的类型是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7050555/