使用javamail从我的Gmail中读取所有新消息 [英] Reading all new messages from my gmail using javamail
问题描述
Jframe
时,我必须在 jTextArea
上看到发送到我的邮件的邮件。 问题是当我写我的代码时,它只显示最后发送的消息。
如何显示所有新消息在我的收件箱?
这是我的代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
属性props = new Properties();
props.put(mail.pop3.host,pop.gmail.com);
props.put(mail.pop3.user,mymail@gmail.com);
props.put(mail.pop3.socketFactory,995);
props.put(mail.pop3.socketFactory.class,javax.net.ssl.SSLSocketFactory);
props.put(mail.pop3.port,995);
会话session = Session.getDefaultInstance(道具,新的Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication(){
返回新的PasswordAuthentication(mymail @ gmail .com,mypassword);
}
});
try {
Store store = session.getStore(pop3);
store.connect(pop.gmail.com,mymail@gmail.com,mypaswword);
文件夹fldr = store.getFolder(INBOX);
fldr.open(Folder.READ_ONLY);
消息[] msg = fldr.getMessages();
地址[]地址; (int i = 0; i< msg.length; i ++){
jTextArea1.setText(SentDate:+ msg [i]
.getSentDate()+\\\
+From:+ msg [i] .getFrom()[0] +\\\
+主题:+ msg [i] .getSubject()+ \\ n+消息:+\\\
+ msg [i] .getContent()。toString());
}
fldr.close(true);
store.close();
} catch(Exception e){
System.out.println(e);
}
您重复设置文本 jTextArea1
到您在这里的消息循环中的相同内容:
for(int i = 0; i
jTextArea1.setText(SentDate:+ msg [i] .getSentDate()+\\\
+来自:+ msg [i] .getFrom()[0] +\\\
+主题:+ msg [i] .getSubject()+\\\
+消息:+\ n+ msg [i] .getContent()。toString());
}
您应该创建一个 StringBuilder
包含所有消息,然后设置 jTextArea1
final StringBuilder sb = new StringBuilder(); (int i = 0; i< msg.length; i ++){
sb.append(SentDate:+ msg [i] .getSentDate()+\ n+From:+ msg [i] .getFrom()[0] +\\\
+主题:+ msg [i] .getSubject()+\\\
+ +\\\
+ msg [i] .getContent()。toString());
}
jTextArea1.setText(sb.toString());
然后,您可以使用增强型for循环并使用 append
方法 StringBuilder
。
final StringBuilder sb = new StringBuilder();
(消息消息:msg){
sb.append(SentDate:)。
append(message.getSentDate())。
append(\\\
)。
append(From:)。
append(message.getFrom()[0])。
append(\\\
)。append(Subject:)。
append(message.getSubject())。
append(\\\
)。
append(Message:)。
append(\\\
)。
append(message.getContent()。toString());
}
jTextArea1.setText(sb.toString());
I have an application which contains a GUI, it is using Javamail. When i open this Jframe
I have to see messages that are sent to my mail on a jTextArea
.
The problem is when i wrote my code it only shows just the last message sent.
How do I display all new messages in my inbox?
This is my code :
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Properties props = new Properties();
props.put("mail.pop3.host", "pop.gmail.com");
props.put("mail.pop3.user", "mymail@gmail.com");
props.put("mail.pop3.socketFactory", 995);
props.put("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.pop3.port", 995);
Session session = Session.getDefaultInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mymail@gmail.com", "mypassword");
}
});
try {
Store store = session.getStore("pop3");
store.connect("pop.gmail.com", "mymail@gmail.com", "mypaswword");
Folder fldr = store.getFolder("INBOX");
fldr.open(Folder.READ_ONLY);
Message[] msg = fldr.getMessages();
Address[] address;
for (int i = 0; i < msg.length; i++) {
jTextArea1.setText("SentDate : " + msg[i].getSentDate() + "\n" + "From : " + msg[i].getFrom()[0] + "\n" + "Subject : " + msg[i].getSubject() + "\n" + "Message : " + "\n" + msg[i].getContent().toString());
}
fldr.close(true);
store.close();
} catch (Exception e) {
System.out.println(e);
}
You repeatedly set the text of the jTextArea1
to the same contents in your loop over messages here:
for (int i = 0; i < msg.length; i++) {
jTextArea1.setText("SentDate : " + msg[i].getSentDate() + "\n" + "From : " + msg[i].getFrom()[0] + "\n" + "Subject : " + msg[i].getSubject() + "\n" + "Message : " + "\n" + msg[i].getContent().toString());
}
You should build a StringBuilder
with all the messages and then set the contents of the jTextArea1
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < msg.length; i++) {
sb.append("SentDate : " + msg[i].getSentDate() + "\n" + "From : " + msg[i].getFrom()[0] + "\n" + "Subject : " + msg[i].getSubject() + "\n" + "Message : " + "\n" + msg[i].getContent().toString());
}
jTextArea1.setText(sb.toString());
You can then make this a lot more legible by using an enhanced for loop and using the append
method of the StringBuilder
.
final StringBuilder sb = new StringBuilder();
for (Message message : msg) {
sb.append("SentDate : ").
append(message.getSentDate()).
append("\n").
append("From : ").
append(message.getFrom()[0]).
append("\n").append("Subject : ").
append(message.getSubject()).
append("\n").
append("Message : ").
append("\n").
append(message.getContent().toString());
}
jTextArea1.setText(sb.toString());
这篇关于使用javamail从我的Gmail中读取所有新消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!