Dans mon application, je me connecte au serveur pour authentifier les utilisateurs. Voici le code:
try {
Properties prop = new Properties();
prop.put("mail.smtp.starttls.enable","true");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.connectiontimeout", 1000);
Session session = Session.getInstance(prop, null);
Transport transport = session.getTransport("smtp");
transport.connect("mion.elka.pw.edu.pl", 587, registerLog, registerPass);
transport.close();
return true;
} catch (NoSuchProviderException ex) {
Logger.getLogger(RegisterController.class.getName()).log(Level.SEVERE, null, ex);
return false;
} catch(AuthenticationFailedException ex) {
Logger.getLogger(RegisterController.class.getName()).log(Level.SEVERE, null, ex);
return false;
} catch (MessagingException ex) {
Logger.getLogger(RegisterController.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
J'ai défini le délai d'expiration de la connexion sur 1000 ms = 1 s, mais il est ignoré. Quand je débogue et que je mets un mauvais nom d'utilisateur et mot de passe
javax.mail.MessagingException: Java.net.SocketTimeoutException: Read timed out
pas après 1000 ms, mais après 5000 * 60 ms = 5 min
Qu'est-ce qui ne va pas ? Comment puis-je réduire le timeoute?
Je résous mon problème en passant à la dernière version de JavaMail (vers JavaMail 1.5). J'écris là-dessus: http://openejb.979440.n4.nabble.com/Which-version-of-JavaMail-td4665285.html
merci à tous pour votre aide, spécialement à Bill Shannon :)
Pouvez-vous également configurer le délai d'expiration des E/S de socket. Lorsqu'il est connecté mais n'a pas pu lire les données du serveur, il continue d'attendre.
prop.put("mail.smtp.timeout", 1000);
Délai de lecture indique que vous êtes connecté mais pas en mesure de lire les données du serveur.
Puisque vous utilisez SSL, vous pouvez essayer de configurer smtps
namespace, pas smtp
:
prop.put("mail.smtps.timeout", 1000);
prop.put("mail.smtps.connectiontimeout", 1000);
BTW: les valeurs de délai d'attente dans les propriétés peuvent être passées en tant que int
, ainsi que String
. JavaMail les traitera tous les deux correctement (au moins v1.5 +).
J'ai eu le même problème. Cela a fonctionné avec la chaîne au lieu de l'entier.
prop.put("mail.smtp.timeout", "1000");
prop.put("mail.smtp.connectiontimeout", "1000");
Non, c'est juste parce que la valeur doit être une chaîne "1000" et non un entier 1000