使用javamail从我的Gmail中读取所有新消息 [英] Reading all new messages from my gmail using javamail

查看:136
本文介绍了使用javamail从我的Gmail中读取所有新消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含GUI的应用程序,它使用的是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆