2013-05-02 4 views
4

J'essaie d'écouter de nouveaux messages en utilisant le protocole POP3. Je suis conscient que Pop3 n'autorise pas l'affichage de nouveaux messages dans la boîte de réception tant que le dossier est ouvert. Ci-dessous le code que j'ai implémenté:Java Mail Écoute des messages 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(); 
} 

J'utilise Microsoft Exchange Server. Des idées pour lesquelles il n'écoute pas?

J'ai regardé http://www.coderanch.com/t/597347/java/java/Email-Listener mais n'écoute toujours pas.

Répondre

6

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


Q: Je mis en place un MessageCountListener (comme le montre le programme de surveillance) mais je ne suis jamais informé de nouveaux messages dans mon POP3 INBOX.

A: Le protocole POP3 ne permet pas au client de voir les nouveaux messages remis à l'INBOX lorsque l'INBOX est ouverte. L'application doit fermer l'INBOX et le rouvrir afin de voir tous les nouveaux messages. Vous ne serez jamais averti des nouveaux messages en utilisant l'interface MessageCountListener avec POP3. Consultez la documentation du package com.sun.mail.pop3 pour plus d'informations.


Ainsi, MessageCountListener ne fonctionnera pas pour POP3. Vous devrez implémenter l'interrogation pour obtenir des informations sur les nouveaux messages pour POP3.

Cependant, vous pouvez essayer d'utiliser IMAP à la place.

Mais même dans le cas d'IMAP, vous devriez l'utiliser d'une autre manière. Voir idle() méthode dans IMAPStore classe (par exemple étant appelé dans une boucle dans un fil séparé etc - voir https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/IMAPStore.html#idle()).

+1

vous l'expliquez très bien ... pouvez-vous fournir un lien où je peux obtenir la configuration pour 'IMAP' plz .... – dom