2010-07-08 2 views
1

Я столкнулся с чем-то тревожным. Я настраиваю приемник учетной записи POP, и похоже, что он работает в некоторых случаях. Когда я подключаюсь к своему серверу с портом 110, он работает нормально (просто появляется сообщение об ошибке при попытке подключиться к SSL, что нормально). Но когда я пытаюсь порт 995, который должен работать с SSL, похоже, что javax.mail (1.4.3) блокируется при выполнении команды input.readLine() (помечено как устаревшая, BTW) вместо того, чтобы бросать IOException предполагается бросить ...javax.mail блокировка при попытке подключения

Я собираюсь добавить тайм-аут, чтобы предотвратить это, но хотел бы получить ваше мнение об этом. Кто-то уже испытал это? Любая идея о том, как ее преодолеть?

Это, как я создаю свой объект магазин:

Properties pop3Props = new Properties(); 
     pop3Props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false"); 
     pop3Props.setProperty("mail.pop3.port", Integer.toString(hostPort)); 
     pop3Props.setProperty("mail.pop3.socketFactory.port", Integer.toString(hostPort)); 
     pop3Props.setProperty("mail.pop3.starttls.enable", String.valueOf(STARTTLS)); 
     pop3Props.setProperty("mail.pop3.auth", String.valueOf(AUTH)); 

     // Create session and URL 
     Session session = Session.getInstance(pop3Props, null); 
     session.setDebug(true); 
     URLName url = new URLName(POP3, host, hostPort, "", username, password); 

     // Create the store 
     if (useSSL) { 
      return new POP3SSLStore(session, url); 
     } else { 
      return new POP3Store(session, url); 
     } 

Это, как я пытаюсь подключиться на этом объекте:

store.connect(host, hostPort, username, password); 

И это javax.mail линия который заставляет замораживать (исходный комментарий включен):

String line = input.readLine(); // XXX - readLine is deprecated 

Большое спасибо за помощь!

Morgan

+0

Дополнительная информация о «определенных» случаях? И можете ли вы опубликовать фрагмент кода, который ведет себя странно? –

+0

Привет. Я обновил обсуждение более подробно. Большое спасибо! – blaguman

+0

Какой тип «входной» объект? –

ответ

1

Я посмотрел на файл - Я не думаю, что метод ReadLine() является проблемой. Поскольку DataInputStream считывает из сокета, я бы попытался проверить, есть ли проблема с сокетом (например, вы случайно закрыли его) или с параметрами, которые вы предоставили для создания сокета.

2

Woohoo! Я действительно нашел способ обойти это! Я просто добавил таймаут в соединение!

pop3Props.setProperty("mail.pop3.timeout", "3000"); pop3Props.setProperty("mail.pop3.connectiontimeout", "3000");

Большое спасибо за все! :)

+0

Ах, хорошо. Пожалуйста. –