当前位置: 首页 > 面试题库 >

使用JavaMail从我的Gmail中读取所有新邮件

秦经义
2023-03-14
问题内容

我有一个包含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循环并使用的append方法使这一点更加清晰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电子邮件中获取HTML。我有以下内容: 上面所有方法都可以,但是我无法打印或获取实际的HTML或文本电子邮件。我只是得到某种InputStream,如何轻松处理以获得原始的电子邮件HTML? 我也尝试遍历消息,但这并没有使我走得太远: } 谢谢大家的帮助。 问题答案: 该对象包含电子邮件的正文。您需要阅读整个流,才能阅读整个消息。例如,该S

  • 问题内容: 我需要从Gmail检索未读邮件。我正在使用Java Mail API。默认情况下,此API从最早的邮件检索到最新的邮件。但是我需要先检索最近的邮件。可能吗?提前致谢。 问题答案: 这是例子。不要忘记在类路径中添加javax.mail。

  • 我正在尝试使用Javamail api获取Gmail中最近发送的邮件。这是代码- 由于getMessage计数返回的数字远远大于实际邮件,因此我得到了一个IndexOutOfBoundsException。 如何使用javamail api从Gmail获取已发送邮件的确切数量?我得到的错误是 - 1986是上述获取的totalSentMails的值,1970是实际发送的邮件数

  • 问题内容: 我正在尝试在JavaMail API的帮助下通过IMAP访问来自Gmail帐户的电子邮件。我想知道为什么代码对一个电子邮件帐户有效,而对另一个电子邮件帐户无效。 我可以访问两个电子邮件帐户的文件夹。但是对于其中一个电子邮件帐户,无法访问其他文件夹,例如,它将引发异常。有人可以解释出什么问题了吗? 先感谢您。 这是代码: 问题答案: 是否有一个帐户使用非英语用户界面? Gmail文件夹名

  • 我有两个问题,它们非常相关。 null 编辑:我试着把它弄清楚。假设我在给B发邮件。B先给我发邮件,所以它就在我的收件箱里。然后我给你回信。在Gmail的收件箱中,两封邮件在对话中连接在一起(因为发件人和主题是相同的)。然而,使用javamail,我只能在我的收件箱中看到第一封电子邮件(B发送的),而我的回复则在我的发送箱中。我能把这两封邮件作为对话收集起来吗? 我需要我发送的所有电子邮件以及任何

  • 问题内容: 我正在尝试访问我的Gmail帐户,并从中检索所有未读电子邮件的信息。 我在引用了许多链接之后编写了代码。我提供一些链接供参考。 使用Java通过GMail帐户发送和接收电子邮件 使用JavaMailAPI接收邮件的Java代码 为了测试我的代码,我创建了一个Gmail帐户。因此,我收到了来自Gmail的4封邮件。检查邮件数量后,我运行我的应用程序。那显示了正确的结果。4封未读邮件。显示