2010-05-05 20 views
5

Sto utilizzando JavaMail per inviare richieste di posta elettronica a un server SMTP.Timeout di Java Mail e gestione del timeout della connessione

vorrei impostare entrambi "mail.smtp.connectiontimeout" e "mail.smtp.timeout" proprietà all'interno del mio codice.

livello di programmazione, voglio prendere sia quando timeout e/o ConnectionTimeout operazioni sono raggiungibili in Java e gestire le cose di conseguenza. Gestendo nel senso, ho bisogno di riprovare la stessa e-mail ancora una volta la prossima volta.

Come gestirlo in Java/JavaMail? È possibile catturare & gestire queste operazioni di timeout?

EDIT

Inoltre, è possibile simulare/riprodurre questo funzionamento timeout da solo assumendo Sono accesso completo di amministrazione per il server SMTP?

risposta

4

rispondere alla tua seconda domanda: Sulla vostra macchina di prova solo cadere tutte le connessioni in uscita al server SMTP con iptables:

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

In questo modo lo fa apparire come un server SMTP risponde e non è possibile verificare la gestione delle eccezioni.

+0

Grazie per i passaggi di simulazione. Ci proverò. – Gnanam

1

All:

Perchè rispondere alla mia domanda, dopo aver sperimentato questo per conto mio.

Come gestirlo in Java/JavaMail? E 'possibile catturare & gestire le operazioni di timeout ?

Sì, si getta automaticamente come 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) 

Questa eccezione viene generata proprio in questa linea:

Transport.connect();

Aperto solo domanda che ho ora è "E 'possibile simulare/riprodurre questa operazione timeout da solo assumendo ho accesso completo di amministrazione per il server SMTP?"

Tutte le idee da esperti?