Drucken Sie die E-Mail-Adresse des Absenders aus InternetAddress
Dies ist der code, der holt sich die sender
und die subject
E-Mail.Mit diesem code sehe ich das richtige Thema immer angezeigt, aber ich kann die Adresse des Absenders in verschiedenen 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) {
}
}
Ausgabe :
[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
, Welche form es ist?(@1462851)
Ich möchte die E-Mail-Adresse des Absenders angezeigt werden, anstatt @1462851
.Wie kann ich dies tun ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
getForm()
gibt ein Objekt zurück. Um es gedruckt haben, als ein einfacher string, versuchen Sie bitteInternetAddress.toString(msgs[i].getFrom())
in IhremSystem.out
.Sollten Sie verwenden
messages[i].getFrom().getAddress()
. Was Sie sehen, ist dietoString
ErgebnisInternetAddress
- Objekt (Klasse, name + hashcode)getAddress()
Habe ich damit verbracht, einige harte Minuten bevor ich fand heraus, diesem einfachen code:
System.out.println("received from "+((InternetAddress)((Address)(message.getFrom()[0]))).getAddress());
Der Grund für dieses ist, weil Sie nur drucken Sie die
InternetAddress
Instanz, die nicht über einetoString()
Methode. Dann ist es standardmäßig derObject.toString()
das ist vor allem nützlich, um zu sehen, wenn die Objekte unterschiedlich sind.Berücksichtigen explizit die Auswahl des Feldes, das Sie wollen, um zu sehen, in die print-Anweisung.