Таймаут Java Mail и обработка тайм-аута соединения - PullRequest
5 голосов
/ 05 мая 2010

Я использую JavaMail для отправки запросов электронной почты на SMTP-сервер.

Я бы хотел установить оба свойства mail.smtp.connectiontimeout * и mail.smtp.timeout * в моем коде.

Программно, я хочу поймать, когда timeout и / или connectiontimeout операции достигнуты в Java и обрабатывают вещи соответственно. В этом смысле мне нужно повторить попытку в тот же адрес электронной почты в следующий раз.

Как мне справиться с этим в Java / JavaMail? Можно ли поймать и обработать операции тайм-аута?

EDIT

Кроме того, возможно ли имитировать / воспроизвести эту операцию тайм-аута самостоятельно, если я имею полный доступ администратора к SMTP-серверу?

Ответы [ 2 ]

4 голосов
/ 24 сентября 2010

Отвечая на второй вопрос: на вашей тестовой машине просто ОТПРАВЬТЕ все исходящие соединения с SMTP-сервером с помощью iptables:

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

Таким образом, он выглядит как не отвечающий SMTP-сервер, и вы можете проверить обработку исключений.

1 голос
/ 10 мая 2010

Все:

Я отвечаю на мой вопрос, после того, как сам его испытал.

Как мне справиться с этим в Java / JavaMail? Можно ли поймать и справиться с этим время ожидания операции?

Да, он автоматически выбрасывается как 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)

Это исключение выдается именно в этой строке:

Transport.connect ();

Единственный открытый вопрос, который у меня есть сейчас: « Можно ли имитировать / воспроизвести эту операцию тайм-аута самостоятельно, если я имею полный доступ администратора к SMTP-серверу? »

Есть идеи от экспертов?

...