带有附件的 Java 邮件:javax.mail.Multipart 上的 ClassCastException

2024-01-02

我使用以下代码从邮件下载附件,但它给出了ClassCastException关于多部分声明:

线程“main”中的异常 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();
}

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

设置默认 CommandMap 对我来说不起作用,但我在这里找到了解决方案:

https://www.java.net/node/705585 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有附件的 Java 邮件:javax.mail.Multipart 上的 ClassCastException 的相关文章

随机推荐