Java邮件监听消息POP3

4

我正在尝试使用POP3协议监听新消息。我知道Pop3不允许在打开文件夹时出现新消息。以下是我实现的代码:

import javax.mail.event.MessageCountAdapter;
import javax.mail.event.MessageCountEvent;

public class EmailListener extends MessageCountAdapter {

public EmailListener() {

}

public void messagesAdded(MessageCountEvent e) {
    System.out.println("I");
}

public void messagesRemoved(MessageCountEvent e) {
    System.out.println("J");
}
}

public class POPReceiver {

 public POPReceiver() {

 }

public void listen() throws Exception {
    Properties properties = new Properties();
    Session session = null;
    POP3Store pop3Store = null;
    String host = "NB-EX101.example.com";
    String user = "user2";
    properties.put(mail.pop3.host, host);
    session = Session.getDefaultInstance(properties);
    pop3Store = (POP3Store) session.getStore("pop3");
    pop3Store.connect(user, "password");
    Folder folder = pop3Store.getFolder("INBOX");
    folder.addMessageCountListener(new EmailListener());
    sendEmail();
}

public void sendEmail() {
    // not added code, but the email sends
}
}

public static void main(String[] args) throws Exception {
      POPReceiver i = new POPReceiver();
      i.listen();
 }

我正在使用Microsoft Exchange Server。有什么原因它没有监听?
我已经查看了http://www.coderanch.com/t/597347/java/java/Email-Listener但仍然没有监听。
1个回答

9

来自Javamail FAQ (http://www.oracle.com/technetwork/java/javamail/faq/index.html):


: 我设置了一个MessageCountListener(就像监控程序中演示的那样),但我从未收到我的POP3邮箱中新邮件的通知。

: POP3协议不允许客户端在邮箱打开时查看发送到该邮箱中的新邮件。应用程序必须关闭收件箱并重新打开才能查看任何新邮件。您永远不会通过MessageCountListener接口在POP3中收到新邮件的通知。请参见com.sun.mail.pop3包文档以获取更多信息。


因此,MessageCountListener在POP3中不起作用。您需要实现轮询以获取有关POP3的新消息的信息。

但是,您可以尝试使用IMAP。

但即使是在IMAP的情况下,您也应该以另一种方式使用它。请参见IMAPStore类中的idle()方法(例如在单独的线程循环调用等 - 请参见https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/IMAPStore.html#idle())。


1
你解释得非常好... 你能提供一个链接,让我可以获取IMAP的配置吗? - dom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接