2013-05-02 123 views
4

我正在尝试使用POP3协议侦听新邮件。我知道当文件夹打开时,Pop3不允许新邮件出现在收件箱中。以下是我已实施的代码:Java邮件侦听邮件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,但仍然不听。

回答

6

从JavaMail的FAQ(http://www.oracle.com/technetwork/java/javamail/faq/index.html):


Q:我设置了一个MessageCountListener(如监控程序证明),但我从来没有在我的POP3 INBOX新邮件通知。

A:POP3协议不允许客户端在INBOX打开时看到传递到INBOX的新消息。应用程序必须关闭INBOX并重新打开它才能看到任何新消息。您将永远不会收到使用POP3的MessageCountListener界面的新邮件通知。有关更多信息,请参阅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 2015-08-22 11:00:46