2013-05-02 119 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