我有一个包含GUI的应用程序,它正在使用Javamail。当我打开它时,Jframe我必须在上看到发送到我的邮件的消息jTextArea。
Jframe
jTextArea
问题是当我编写代码时,它仅显示最后发送的消息。
如何在收件箱中显示所有新邮件?
这是我的代码:
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); }
您jTextArea1在以下消息循环中反复将的文本设置为相同的内容:
jTextArea1
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()); }
您应该StringBuilder使用所有消息构建一个,然后设置jTextArea1
StringBuilder
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());
然后,您可以通过使用增强的for循环并使用的append方法使这一点更加清晰StringBuilder。
append
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());