4

これは、電子メールの と を取得するコードです。このコードを使用するsendersubject、正しい件名が表示されますが、送信者のアドレスが異なる形式で表示されます。

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_ONLY);
      Message msgs[] = fldr.getMessages();
        for(int i = 0 ; i < msgs.length ; i++) {
            System.out.println(msgs[i].getFrom() + "<-- FROM" + " " + msgs[i].getSubject() + "<---Subject");
        }
    } catch(Exception exc) {

    }
}

出力は次のとおりです。

[Ljavax.mail.internet.InternetAddress;@1462851<-- FROMGet Gmail on your mobile phone<---Subject
[Ljavax.mail.internet.InternetAddress;@bdab91<-- FROMImport your contacts and old email<---Subject
[Ljavax.mail.internet.InternetAddress;@4ac00c<-- FROMCustomize Gmail with colors and themes<---Subject
[Ljavax.mail.internet.InternetAddress;@1865b28<-- FROMtester<---Subject

それはどんな形ですか?(@1462851) の代わりに送信者のメールアドレスを表示したいのですが、@1462851どうすればいいですか?

4

4 に答える 4

8

getForm()オブジェクトを返します。プレーン文字列として印刷するにInternetAddress.toString(msgs[i].getFrom())は、System.out.

于 2011-07-24T11:23:10.427 に答える
4

この単純なコードを見つける前に、私は苦労しました:

System.out.println("received from "+((InternetAddress)((Address)(message.getFrom()[0]))).getAddress());

于 2014-01-14T11:23:06.367 に答える
3

を使用する必要がありますmsgs[i].getFrom().getAddress()。表示されるのは、オブジェクト (クラス名 + ハッシュコード)のtoString結果ですInternetAddress

于 2011-07-24T11:25:02.333 に答える
0

InternetAddressこれは、メソッドを持たないインスタンスを出力するだけだからですtoString()。次にObject.toString()、オブジェクトが異なるかどうかを確認するのに主に役立つ にデフォルト設定されます。

print ステートメントで表示するフィールドを明示的に選択することを検討してください。

于 2011-07-24T11:23:14.373 に答える