java.lang.ClassCastException : javax. mail.internet.MimeMultipart 无法在 NewClass.main(NewClass.java:34) 处转换​​为 java.lang.String

标签 java swing jakarta-mail gmail-imap jtextcomponent

这是用于从 Gmail 服务器获取电子邮件的代码。除此之外,还将主题和发件人分开。我正在检查的收件箱有 5 条消息。(一些已读,一些未读) 我希望 html 内容可见,所以我使用 JEditorPane

 import javax.mail.*;
 import javax.mail.internet.*;
 import java.util.*;
 import javax.swing.*;

 class NewClass {
 public static void main(String args[]) {
    Properties props = new Properties();
    props.put("mail.imap.host" , "imap.gmail.com" );
    props.put("mail.imap.user" , "username");
    // User SSL
    props.put("mail.imap.socketFactory" , 993);
    props.put("mail.imap.socketFactory.class" , "javax.net.ssl.SSLSocketFactory" );
    props.put("mail.imap.port" , 993 );
    Session session = Session.getDefaultInstance(props , new Authenticator() {
        @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("username" , "password");
        }
    });

    try {
      Store store = session.getStore("imap");
      store.connect("imap.gmail.com" , "username" , "password");
      Folder fldr = store.getFolder("Inbox");
      fldr.open(Folder.READ_WRITE);
      Message msgs[] = fldr.getMessages();
        for(int i = 0 ; i < msgs.length ; i++) {
            // program breaks after the following statement
            System.out.println(InternetAddress.toString(msgs[i].getFrom()) + "<-- FROM" + " " + msgs[i].getSubject() + "<---Subject"); 
            JFrame fr = new JFrame();
            JPanel p = new JPanel();
            JEditorPane ep = new JEditorPane("text/html" , (String)msgs[i].getContent());
    ep.setEditable(false);
            JScrollPane sp = new JScrollPane(ep);
            p.add(ep);
            fr.add(p);
            fr.setSize(300,300);
            fr.setVisible(true);
        }
    } catch(Exception exc) {

    }
}

}

我得到的输出是: Gmail Team <mail-noreply@google.com><-- FROM Get Gmail on your mobile phone<---Subject

在此输出之后,程序给出以下异常 java.lang.ClassCastException: javax.mail.internet.MimeMultipart cannot be cast to java.lang.String at NewClass.main(NewClass.java:34) 。 为什么框架不可见?

最佳答案

错误就在这里

JEditorPane ep = new JEditorPane("text/html" , (String)msgs[i].getContent());

您有多部分消息msgs[i].getContent() 返回javax.mail.internet.MimeMultipart。您可以对其调用 toString,但正确的方法是从中获取邮件部分。首先,您可以通过 instanceof MimeMultipart 进行检查。看JAVAMAIL API FAQ如何处理多部分消息。

关于java.lang.ClassCastException : javax. mail.internet.MimeMultipart 无法在 NewClass.main(NewClass.java:34) 处转换​​为 java.lang.String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6808547/

相关文章:

java - 对迄今为止的集合进行排序

java - 等效的 SWTTreeNode API

java - 使用 MultipartFile 发送带有多个附件的电子邮件

java - 如何在没有完整源代码的情况下获取邮件内容?

java - Google Play - onReceivedSslError

java - 从 docker 启动 HSQL 服务器时运行默认脚本

java - 像间隔 java 一样将元素插入到 ArrayList

java - Spring Boot 多数据源 - 只工作一个

java - 如何在Java中绘制点并保存输出图像?

java - JScrollPane 打破从右到左的方向