这是提取电子邮件的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
。我该怎么做?
答案 0 :(得分:5)
getForm()
返回一个对象。要将其打印为纯字符串,请在InternetAddress.toString(msgs[i].getFrom())
中尝试System.out
。
答案 1 :(得分:3)
您应该使用msgs[i].getFrom().getAddress()
。您看到的是toString
对象(类名+哈希码)
InternetAddress
结果
答案 2 :(得分:2)
在我发现这个简单的代码之前,我花了很多时间:
System.out.println("received from "+((InternetAddress)((Address)(message.getFrom()[0]))).getAddress());
答案 3 :(得分:0)
之所以这样,是因为您只打印出InternetAddress
实例,该实例没有toString()
方法。然后它默认为Object.toString()
,这对于查看对象是否不同非常有用。
考虑明确挑选您想要在print语句中看到的字段。