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

标签 java macos jakarta-mail

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

相关文章:

java - 唾手可得的图形编程成果?

java - 服务器应用程序 : Only works with a println output

macos - 深色背景上的浅色文本在 Firefox for Mac 上过于粗体

macos - 在MacOS上打开INI文件时出现Unicode映射错误

java - 可用的密码网络应用程序

Java mailto 到 MIME

java - eclipse中的叉号是什么意思

java - Android 为什么我的 checkDB 一直给出 false?

macos - "Install-Module -name AzureAD"在装有 MacOSX 的 PS6 上失败并出现错误

java - 使用现有 InputStream 作为附件内容使用 javax.mail 发送电子邮件