2010-05-05 11 views
5

J'utilise JavaMail pour envoyer des demandes de courrier électronique à un serveur SMTP.Java Mail timeout & connectiontimeout gestion

Je voudrais mettre les deux "mail.smtp.connectiontimeout" et "mail.smtp.timeout" propriétés dans mon code.

Programmatically, je veux attraper les deux quand délai et/ou opérations connectiontimeout sont atteintes en Java et de gérer les choses en conséquence. Manipulation dans le sens, je dois réessayer le même email encore la prochaine fois.

Comment gérer ceci dans Java/JavaMail? Est-il possible d'attraper & gérer ces opérations de timeout?

EDIT

Aussi, est-il possible de simuler/reproduire cette opération de délai d'attente sur mon propre en supposant que j'ai un accès complet d'administration au serveur SMTP?

Répondre

4

répondre à votre deuxième question: Sur votre machine de test juste DROP toutes les connexions sortantes vers votre serveur SMTP avec iptables:

iptables -I OUTPUT 1 -p tcp -s 192.168.1.20 --dport 25 -j DROP 

De cette façon, il ne ressemble à un serveur smtp ne répond pas et vous pouvez tester votre gestion des exceptions.

+0

Merci pour ces étapes de simulation. Je vais essayer ça. – Gnanam

1

Tous:

Am répondre à ma question, après avoir connu ce moi-même.

Comment gérer ceci dans Java/JavaMail? Est-il possible d'attraper & gérer cette opérations de temporisation?

Oui, il est jeté automatiquement javax.mail.MessagingException.

javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
     java.net.SocketTimeoutException: Read timed out 
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462) 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370) 
     at javax.mail.Service.connect(Service.java:297) 
     at javax.mail.Service.connect(Service.java:156) 
     at javax.mail.Service.connect(Service.java:105) 

Cette exception est levée exactement sur cette ligne:

Transport.connect();

seule question ouverte, je l'ai maintenant « Est-il possible de simuler/reproduire cette opération de délai d'attente sur mon propre en supposant que j'ai un accès complet d'administration au serveur SMTP? »

Toutes les idées de experts?