Распечатка адреса электронной почты отправителя из InternetAddress - PullRequest
3 голосов
/ 24 июля 2011

Это код, который получает sender и subject сообщения электронной почты. С помощью этого кода я вижу, что отображается правильный предмет, но я вижу адрес отправителя в другом формате.

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 ]

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

getForm() возвращает объект.Чтобы распечатать его в виде простой строки, попробуйте InternetAddress.toString(msgs[i].getFrom()) в вашем System.out.

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

Вы должны использовать msgs[i].getFrom().getAddress().То, что вы видите, является toString результатом InternetAddress объекта (имя класса + хэш-код)

2 голосов
/ 14 января 2014

Я потратил несколько трудных минут, прежде чем нашел этот простой код:

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

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

Причина этого в том, что вы просто распечатываете экземпляр InternetAddress, у которого нет метода toString(). Тогда по умолчанию используется значение Object.toString(), которое в первую очередь полезно, если объекты различаются.

Попробуйте явно выделить поле, которое хотите видеть в своем заявлении на печать.

...