我使用以下代码从邮件中下载附件,但它给出ClassCastException
了Multipart声明:
异常在线程"主要" java.lang.ClassCastException:com.sun.mail.imap.IMAPInputStream不能转换到javax.mail.Multipart在ReadAttachment.main(ReadAttachment.java:52)
我该如何处理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();
}
Run Code Online (Sandbox Code Playgroud)
我遇到了与JavaMail 1.5.1和OSGi相同的问题.使用msg.getContent()总是在从OSGi包调用时返回一个InputStream,而当从一个简单的Java测试程序调用时它完美地工作.
设置默认的CommandMap对我来说不起作用,但我在这里找到了一个解决方案:
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);
}
Run Code Online (Sandbox Code Playgroud)
是的,因为您假设getContent()
返回一些实现的东西Multipart
,而在这种情况下它没有(IMAPInputStream
扩展InputStream
)。
您的代码需要考虑这种可能性。
归档时间: |
|
查看次数: |
10102 次 |
最近记录: |