1

我有这个问题 JavaMail中描述的问题:如何为不同的线程使用不同的SOCKS5?

..但是这个问题没有真正的答案:-(

另外,我想从 imap(s) 文件夹中检索邮件,但我不知道如何告诉 javaMail 在不通过全局系统属性设置的情况下使用 socks 代理。(sockProxyHost 等等......)如果我这样做,并行数据库请求也想使用 socks 代理,但他们不应该(无法通过 socks 代理访问 db)

非常感谢任何提示。汉斯

4

1 回答 1

3

我和同事一起解决了

要使用 socks 代理,您必须执行以下操作..

在 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 回答