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

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

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

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

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

1 Ответ

3 голосов
/ 13 декабря 2011

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

, чтобы использовать прокси 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));

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

Удачи: -)

...