我正在使用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/

10-10 14:08