0

これは、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)。フレームが表示されないのはなぜですか?

4

3 に答える 3

3

エラーはここにあります

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

マルチパートメッセージmsgs[i].getContent()が返されますjavax.mail.internet.MimeMultipart。toStringを呼び出すことはできますが、正しいアプローチはそこからメールパーツを取得することです。まず、で確認できますinstanceof MimeMultipart。マルチパートメッセージの処理方法について は、JAVAMAILAPIFAQを参照してください。

于 2011-07-24T18:09:59.827 に答える
1
(文字列)msgs [i] .getContent()

これはおそらくMimeMultiPartオブジェクトを返し、それをStringにキャストしています。

于 2011-07-24T18:08:01.597 に答える
1

exc.printStackTrace()キャッチブロックを入れて、問題が何であるかを確認してください。

/e
あなたの問題は(String)msgs[i].getContent()です。試してみてくださいmsgs[i].getContent().toString()

于 2011-07-24T17:57:27.887 に答える