java.lang.ClassCastException: javax.mail.internet.MimeMultipart нельзя привести к java.lang.String в NewClass.main (NewClass.java:34). - PullRequest
0 голосов
/ 24 июля 2011

Это код, предназначенный для получения электронной почты с сервера 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). Почему рамка не видна?

Ответы [ 3 ]

3 голосов
/ 24 июля 2011

Ошибка здесь

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

у вас есть многочастное сообщение msgs[i].getContent() возвращает javax.mail.internet.MimeMultipart.Вы можете вызвать toString для него, но правильный подход - получить от него части почты.Сначала вы можете проверить по instanceof MimeMultipart.Посмотрите FAQ по JAVAMAIL API как работать с составными сообщениями.

1 голос
/ 24 июля 2011
(String)msgs[i].getContent()

Возможно, это возвращает объект MimeMultiPart, и вы приводите его к типу String.

1 голос
/ 24 июля 2011

Попробуйте поставить exc.printStackTrace() в блоке catch, чтобы увидеть, в чем проблема.

/ e
Ваша проблема (String)msgs[i].getContent().Попробуйте msgs[i].getContent().toString().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...