java - 使用 javamail 从我的 gmail 中读取所有新邮件

标签 java email jframe jakarta-mail jtextarea

我有一个包含 GUI 的应用程序,它使用 Javamail。当我打开这个 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 的文本重复设置为相同的内容:

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

的内容
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 循环和使用 StringBuilderappend 方法使它更清晰。

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());

关于java - 使用 javamail 从我的 gmail 中读取所有新邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906799/

相关文章:

delphi - 25端口接收邮件是否可以实现SSL连接

Python - 获取多部分电子邮件的正文

java - LWJGL 键盘输入不起作用

java - NotSerializedException GroupLayout 通过 RMI 发送 Frame

java - 调用 Scanner.close() 抛出 nosuchelementexception

java - 将 .jar 导入到项目结构中

java - 回到基础 : Apache Camel Routes and Direct Component

email - 为什么来 self 服务器的电子邮件被热门客户标记为垃圾邮件?

java - Java 游戏开发应使用哪种类型的覆盖?

java - ColorPickerPreference 不支持的major.minor 版本52.0