2010-07-08 6 views
1

Je suis confronté à quelque chose de dérangeant. Je configure un récepteur de compte POP, et il semble que cela fonctionne dans certains cas. Lorsque je me connecte à mon serveur avec le port 110, cela fonctionne correctement (il suffit d'avoir un message d'erreur lorsque je tente de me connecter avec SSL, ce qui est normal). Mais quand j'essaie le port 995, qui devrait fonctionner avec SSL, il semble que javax.mail (1.4.3) bloque en exécutant une commande input.readLine() (marquée comme deprecated, BTW), au lieu de lancer le IOException il est censé lancer ...javax.mail blocage en essayant de se connecter

Je vais ajouter un délai d'attente pour éviter cela, mais je voulais avoir votre avis à ce sujet. Est-ce que quelqu'un a déjà vécu cela? Une idée sur comment s'en sortir?

Voici comment je crée mon objet de magasin:

Properties pop3Props = new Properties(); 
     pop3Props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false"); 
     pop3Props.setProperty("mail.pop3.port", Integer.toString(hostPort)); 
     pop3Props.setProperty("mail.pop3.socketFactory.port", Integer.toString(hostPort)); 
     pop3Props.setProperty("mail.pop3.starttls.enable", String.valueOf(STARTTLS)); 
     pop3Props.setProperty("mail.pop3.auth", String.valueOf(AUTH)); 

     // Create session and URL 
     Session session = Session.getInstance(pop3Props, null); 
     session.setDebug(true); 
     URLName url = new URLName(POP3, host, hostPort, "", username, password); 

     // Create the store 
     if (useSSL) { 
      return new POP3SSLStore(session, url); 
     } else { 
      return new POP3Store(session, url); 
     } 

Voilà comment je suis en train de se connecter sur cet objet:

store.connect(host, hostPort, username, password); 

Et ceci est la ligne de javax.mail qui fait tout geler (commentaire original inclus):

String line = input.readLine(); // XXX - readLine is deprecated 

Merci beaucoup pour votre aide!

Morgan

+0

Plus d'informations sur "certains" cas? Et pourriez-vous poster le morceau de code qui se comporte bizarrement? –

+0

Bonjour. J'ai mis à jour la discussion avec plus de détails. Merci beaucoup! – blaguman

+0

De quel type est l'objet "input"? –

Répondre

1

J'ai eu un regard sur le fichier - Je ne pense pas que la méthode ReadLine() est le problème. Puisque le DataInputStream est en train de lire à partir d'un socket, j'essayerais de vérifier s'il y a un problème avec le socket (par exemple si vous l'avez accidentellement fermé) ou avec les paramètres que vous fournissez pour créer le socket.

2

Woohoo! J'ai trouvé un moyen de contourner cela! Je viens d'ajouter un délai d'expiration sur la connexion!

pop3Props.setProperty("mail.pop3.timeout", "3000"); pop3Props.setProperty("mail.pop3.connectiontimeout", "3000");

Merci beaucoup pour tout! :)

+0

Ah, bien. Vous êtes le bienvenu. –