Подтвердить что ты не робот

Почему таймаут соединения JavaMail слишком длинный

В моем приложении я подключаюсь к серверу для аутентификации пользователей. Это код:

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;
    }

Я установил время ожидания соединения до 1000 мс = 1 с, но он игнорирует. Когда я отлаживаю и устанавливаю неправильное имя пользователя и пароль, я поймаю

javax.mail.MessagingException: java.net.SocketTimeoutException: Read timed out

не после 1000 мс, но после 5000 * 60 мс = 5 мин

Что не так? Как я могу сократить время ожидания?

4b9b3361

Ответ 2

Можете ли вы установить тайм-аут ввода-вывода Socket. Когда он подключен, но не смог прочитать данные с сервера, он будет продолжать ждать.

prop.put("mail.smtp.timeout", 1000);

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

Ответ 3

Нет, это просто потому, что значение должно быть строкой "1000", а не целым числом 1000

Ответ 4

У меня была та же проблема. Он работал с строкой вместо целого.

prop.put("mail.smtp.timeout", "1000");    
prop.put("mail.smtp.connectiontimeout", "1000");    

Ответ 5

Поскольку вы используете SSL, вы можете попытаться настроить пространство имен smtps, а не smtp:

prop.put("mail.smtps.timeout", 1000);
prop.put("mail.smtps.connectiontimeout", 1000);

BTW: значения тайм-аута в свойствах могут быть переданы как int, а также String. JavaMail будет обрабатывать их как должным образом (по крайней мере, v1.5 +).