Java Mail: как использовать SOCKS для обработки IMAP без глобальных системных свойств?

У меня есть проблема, описанная в этом вопросе JavaMail: Как использовать разные SOCKS5 для разных потоков?

..но на этот вопрос нет ответа :-(

кроме того, я хочу получать почту из папки imap (s), и я не знаю, как указать javaMail использовать прокси-сервер socks без настройки через глобальные системные свойства. (sockProxyHost и т. д.) Если я сделаю это, параллельные запросы к базе данных также захотят использовать прокси-сервер socks, но они не должны (db недоступен через прокси-сервер socks)

Заранее большое спасибо за любую подсказку. Ганс


person RenneB    schedule 08.11.2011    source источник
comment
любые намеки? копия системных реквизитов не помогает :-( есть ли другой способ, кроме манипулирования javaMail.jar?   -  person RenneB    schedule 09.11.2011


Ответы (1)


Я решил это вместе с коллегой

чтобы использовать прокси-сервер socks, вы должны сделать следующее.

внутри mail.jar вы можете найти класс SocketFetcher. внутри этого класса проверяется, установлен ли объект фабрики сеансов или имя класса через системные свойства. Я реализовал собственное копирование SocketFactory из SSLSocketFactory, и мне пришлось манипулировать SocketFetcher внутри javaMail, и я заменил файл класса для вызова метода createSocket(host, port) из моего собственного SocketFactory. И там я использовал прокси для

String proxyHost = System.getProperty(SYSTEM_PROP_SOCKS_PROXY_HOST);
int proxyPort = Integer.parseInt(System.getProperty(SYSTEM_PROP_SOCKS_PROXY_PORT));

SocketAddress addr = new InetSocketAddress(proxyHost, proxyPort);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr);
socket = new Socket(proxy);

дополнительно мне пришлось манипулировать SocketFetcher.createSocket()...

socket.connect(new InetSocketAddress(host, port));

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

Много удачи :-)

person RenneB    schedule 13.12.2011
comment
Можете ли вы поделиться исправленной версией JavaMail? И вам все еще нужно настроить свойства системы? - person Clark; 14.12.2011