在Java项目中,我可以从gmail服务器接收邮件。但我想收到身体的包裹部分。在这个代码示例中我的最后一个message(messages.length - 1)
是多部分/混合的。
调试是通过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()));
}
}
}
}
Edit
我解决了使用 mail.jar、additional.jar 和activation.jar 的问题,它们仅用于Java项目.
(我之前为我的 Android 项目下载了这些 jar。这就是问题的根源。)
当我使用 Android JavaMail 阅读邮件附件时,我遇到了类似的问题。我通过添加以下代码行修复了此错误。 MailCap 有问题,javamail 找不到多部分/混合部分的处理程序,因此需要添加这一点。这解决了我的问题。希望它能帮助那里的人。
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);
Cheers!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)