无法将IMAPInputStream强制转换为Multipart

Mer*_*rve 3 java exception multipart jakarta-mail

在Java项目中,我可以从gmail服务器接收邮件.但我想收到身体的包裹部分.在这个代码示例中,我的最后一个message(messages.length - 1)是multipart/mixed.

调试是在if块上传递但它落入catch块并给我这个消息:

线程"main"中的异常java.lang.ClassCastException:com.sun.mail.imap.IMAPInputStream无法强制转换为javax.mail.Multipart

我该如何处理这个问题?

Message[] messages = folder.getMessages();
        ArrayList<String> attachments = new ArrayList<String>();
        for (int i = messages.length - 1; i >= 0; i--) {

            Part p = messages[i];
            if (messages[i].isMimeType("multipart/*")) 
            {           
                ***Multipart multipart = (Multipart) messages[i].getContent();***
                for (int j = 0, m = multipart.getCount(); j < m; j++) {

                    Part part = multipart.getBodyPart(j);
                    String disposition = part.getDisposition();
                    //
                    if (disposition != null
                            && (disposition.equals("ATTACHMENT"))) 
                    {
                        System.out.println(part.getFileName());
                        attachments.add(saveFile(MimeUtility.decodeText(part.getFileName()), part.getInputStream()));
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

编辑

我修复了使用mail.jar,additional.jar和activation.jar的问题,它们只用于Java Project.

(我之前为我的Android项目下载了这些罐子.这就是问题的根源.)

jag*_*han 12

我在使用Android JavaMail阅读邮件附件时遇到了类似的问题.我通过添加以下代码行修复了此错误.MailCap有问题,javamail找不到multipart/mixed部分的处理程序,所以需要添加这个位.这解决了我的问题.希望它可以帮助那里的人.

MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
Run Code Online (Sandbox Code Playgroud)

干杯!