【发布时间】:2015-03-22 04:05:18
【问题描述】:
我试图通过代理从 POP3 服务器获取邮件。大多数“教程”建议做类似的事情
Properties p = System.getProperties();
p.setProperty("proxySet", "true");//does this line even do anything?
p.setProperty("socksProxyHost", proxyHost);
p.setPorperty("socksProxyPort", proxyPort);
p.setProperty("socksProxyVersion", "5");//or 4 if you want to use 4
p.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
p.setProperty("mail.pop3.socketFactory.fallback", "false");//also not sure what it does
p.setProperty("mail.pop3.port", portOnHostYouWantToTalkTo);
p.setProperty("mail.pop3.socketFactory.port", portOnHostYouWantToTalkTo);
Session session = Session.getDefaultInstance(p, null);
//or session = Session.getInstance(p, null);
URLName urlName = new URLName(protocol, hostYouwantToTalkTo, portOnHostYouWantToTalkTo, null, mailbox, mailboxPassword);
Store store = session.getStore(urlName);
现在,如果我做这样的事情,我会得到一个例外:
java.net.SocketException: Can't connect to SOCKS proxy:Connection timed out: connect.
我的 POP3 服务器没有记录任何连接,这表明我的代码中存在代理问题或错误。我现在使用的是 73.29.157.190:29099。
2) 但是,如果我愿意
Properties p = new Properties();
//all the same logic and stuff
Session = Session.getInstance(p, null);
我的 POP3 服务器记录了来自 localhost 的连接,并且工作正常,这表明我没有使用代理来连接它,其他一切都很好。
我的问题是,为什么“教程”使用 System.getProperties() 并将其传递给 getInstance()?每个 Session 实例都会保留对 System.properties 的引用。因此,每次您尝试创建新实例或以任何方式更改 System.getProperties() 时,实际上每个 Session 实例都会受到影响,因此您不妨重用相同的实例。
javamail 是否需要在 System.properties 中专门设置某些内容,而不是传递给 Session 的内容?
另外,为了让 javamail 使用代理,您需要设置哪些参数? System.properties 有什么使其与我的新属性不同的功能?一个很好的教程或解释它的文档的链接将不胜感激。
谢谢!
【问题讨论】:
标签: java proxy smtp jakarta-mail pop3