我有这个问题 JavaMail中描述的问题:如何为不同的线程使用不同的SOCKS5?
..但是这个问题没有真正的答案:-(
另外,我想从 imap(s) 文件夹中检索邮件,但我不知道如何告诉 javaMail 在不通过全局系统属性设置的情况下使用 socks 代理。(sockProxyHost 等等......)如果我这样做,并行数据库请求也想使用 socks 代理,但他们不应该(无法通过 socks 代理访问 db)
非常感谢任何提示。汉斯
我有这个问题 JavaMail中描述的问题:如何为不同的线程使用不同的SOCKS5?
..但是这个问题没有真正的答案:-(
另外,我想从 imap(s) 文件夹中检索邮件,但我不知道如何告诉 javaMail 在不通过全局系统属性设置的情况下使用 socks 代理。(sockProxyHost 等等......)如果我这样做,并行数据库请求也想使用 socks 代理,但他们不应该(无法通过 socks 代理访问 db)
非常感谢任何提示。汉斯
我和同事一起解决了
要使用 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 不是您的
运气好:-)