блокировка javax.mail при попытке подключения - PullRequest
1 голос
/ 08 июля 2010

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

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

Вот как я создаю свой объект Store:

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

Ответы [ 2 ]

2 голосов
/ 08 июля 2010

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

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

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

1 голос
/ 08 июля 2010

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

...