我正在使用 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的extends。 所以我用它来解决问题。
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 下运行上面的代码,它也不起作用。异常(exception)是 java.lang.String cannot be cast to java.io.InputStream
. part.getContent() 返回一个字符串作为互联网上的例子。
我只是不知道原因。如何在 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/