1

この質問で説明されている問題があります JavaMail:スレッドごとに異なるSOCKS5を使用するにはどうすればよいですか?

..しかし、この質問に対する実際の答えはありません:-(

さらに、imap(s)フォルダーからメールを取得したいのですが、グローバルシステムプロパティを介して設定せずにsocksプロキシを使用するようにjavaMailに指示する方法がわかりません。(sockProxyHostなど...)そうする場合、並列データベース要求もsocksプロキシを使用したいのですが、使用しないでください(dbはsocksプロキシ経由でアクセスできません)

ヒントを事前に感謝します。ハンス

4

1 に答える 1

3

同僚と一緒に解決しました

ソックス プロキシを使用するには、次の手順を実行する必要があります。

mail.jar 内に SocketFetcher クラスがあります。このクラス内で、セッション ファクトリ オブジェクトまたはクラス名がシステム プロパティを介して設定されているかどうかがチェックされます。SSLSocketFactory からコピーする独自の SocketFactory を実装し、javaMail 内で SocketFetcher を操作する必要があり、クラス ファイルを置き換えて、独自の SocketFactory から createSocket(host, port) メソッドを呼び出しました。そこでプロキシを使用して

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 が使用されますが、これはあなたのものではありません。

たくさんの幸運:-)

于 2011-12-13T08:42:49.507 に答える