Printing out the email address of sender from InternetAddress
-
25-10-2019 - |
Question
This is the code that fetches up the sender
and the subject
of email.With this code i see the correct subject getting displayed but i see the address of the sender in different format.
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) {
}
}
The output is :
[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
What form it is?(@1462851)
I want the email address of sender to appear instead of @1462851
.How can i do this ?
Solution
The getForm()
returns an object. To have it printed as a plain string, please try InternetAddress.toString(msgs[i].getFrom())
in your System.out
.
OTHER TIPS
You should use msgs[i].getFrom().getAddress()
. What you see is the toString
result of InternetAddress
object (class name + hashcode)
I've spent some hard minutes before I found out this simple code:
System.out.println("received from "+((InternetAddress)((Address)(message.getFrom()[0]))).getAddress());
The reason for this is because you just print out the InternetAddress
instance, which does not have a toString()
method. Then it defaults to the Object.toString()
which is primarily useful to see if objects are different.
Consider explicitly picking out the field you want to see in your print statement.