带附件的Java邮件:javax.mail.Multipart上的ClassCastException [英] Java mail with attachment: ClassCastException on javax.mail.Multipart

查看:315
本文介绍了带附件的Java邮件:javax.mail.Multipart上的ClassCastException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码从邮件中下载附件,但它在Multipart声明中给出 ClassCastException

I use the following code to download the attachment from the mail but it gives the ClassCastException on the Multipart declaration:


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

Exception in thread "main" java.lang.ClassCastException: com.sun.mail.imap.IMAPInputStream cannot be cast to javax.mail.Multipart at ReadAttachment.main(ReadAttachment.java:52)

如何处理IMAPInputStream?

How do I handle IMAPInputStream?

Message messages[] = inbox.getMessages();

for (int j = 0; j < messages.length; j++) {

   String mailType = messages[j].getContentType();

   System.out.println("-- Message " + (j + 1) + " --");

   System.out.println("SentDate : " + messages[j].getSentDate());
   System.out.println("From : " + messages[j].getFrom()[0]);
   System.out.println("Subject : " + messages[j].getSubject());             
   System.out.println("Type :" + messages[j].getContentType()); 
   System.out.println("Attachment :" + messages[j].getFileName());  

   Multipart mp = (Multipart) messages[j].getContent();
   ..

   System.out.println();
}


推荐答案

我遇到了同样的问题JavaMail 1.5.1和OSGi。使用msg.getContent()时,从OSGi包调用时总是返回一个InputStream,而当从一个简单的Java测试程序调用它时它是完美的。

I had the same problem with the JavaMail 1.5.1 and OSGi. Using msg.getContent() always returned an InputStream when called from an OSGi bundle while it works perfectly when called from a simple Java test program.

设置默认的CommandMap didn'为我工作,但我在这里找到了解决方案:

Setting the default CommandMap didn't work for me, but I found a solution here:

https://www.java.net/node/705585

ClassLoader tcl = Thread.currentThread().getContextClassLoader();
try {
    Thread.currentThread().setContextClassLoader(javax.mail.Session.class.getClassLoader());
    // now call JavaMail API
    // ...
} finally {
    Thread.currentThread().setContextClassLoader(tcl);
}

这篇关于带附件的Java邮件:javax.mail.Multipart上的ClassCastException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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