无法将IMAPInputStream转换为Multipart [英] Can not cast IMAPInputStream to Multipart

查看:322
本文介绍了无法将IMAPInputStream转换为Multipart的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Java项目中,我可以从gmail服务器接收邮件。但是我想收到身体的包裹部分。在这个代码示例中,我的最后一个消息(messages.length - 1)是multipart / mixed。调试是通过if块,但它落入catch块,并给我这个消息:线程main中的异常java.lang.ClassCastException:com.sun.mail.imap.IMAPInputStream不能转换为javax.mail.Multipart

In Java project, I can receive mails from gmail server. But I want to receive the package part of body. And in this code sample my last message(messages.length - 1) is multipart/mixed. Debug is pass on the if block but it fall into the catch block and gave me this message : Exception in thread "main" java.lang.ClassCastException: com.sun.mail.imap.IMAPInputStream cannot be cast to 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()));
                    }
                }
            }
        }

EDIT

我使用仅使用 Java Project

I fixed problem with using mail.jar, additional.jar and activation.jar which are using for only Java Project.

(我是为我的Android项目下载这些jar,这是问题的根源。)

(I was download these jars before for my Android Project. That was the source of problem.)

推荐答案

当我使用Android JavaMail阅读邮件附件时遇到类似的问题。我已经通过添加以下代码行来修复此错误。 MailCap有问题,javamail无法找到多部分/混合部分的处理程序,因此需要添加该位。这解决了我的问题。希望它帮助某人在那里。

I ran into similar problem while I was to read message attachments using Android JavaMail. I have fixed this error by adding following lines of code. There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. This resolved my problem. Hope it helps someone out there.

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);

干杯!

这篇关于无法将IMAPInputStream转换为Multipart的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆