我有这个问题中描述的问题JavaMail: How to use different SOCKS5 for different threads?
..but这个问题没有真正的答案:-(
此外,我想从imap(s)文件夹中检索邮件,但我不知道如何告诉javaMail使用socks代理,而不是通过全局系统属性进行设置。(sockProxyHost等...)如果我这样做了,并行数据库请求也希望使用socks代理,但它们不应该使用(db不能通过socks代理访问)
在此之前,非常感谢您的提示。汉斯
发布于 2011-12-13 16:42:50
我和一个同事一起解决的
要使用socks代理,您必须执行以下操作。
在mail.jar中,您可以找到SocketFetcher类。在这个类中,会检查是否通过系统属性设置了会话工厂对象或类名。我从SSLSocketFactory实现了自己的SocketFactory复制,我必须在javaMail中操作SocketFetcher,并且我替换了类文件,以便从我自己的SocketFactory调用createSocket(主机、端口)方法。在那里我使用了一个代理
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));...you必须检查套接字是否已连接,否则将抛出异常,并使用不属于您的默认socketFactory
祝你好运:-)
https://stackoverflow.com/questions/8047541
复制相似问题