【问题标题】:SMTP/POP3 through proxy System.getProperties() vs new Properties()?通过代理 System.getProperties() 与 new Properties() 的 SMTP/POP3?
【发布时间】: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


    【解决方案1】:

    首先,get rid of all the socket factory stuff,你不需要它。

    接下来,确保您确实拥有 SOCKS 代理,而不仅仅是 Web 代理。如果您这样做,请参阅this JavaMail FAQ entry

    为 SOCKS 代理设置系统属性将导致您程序中的所有网络连接通过代理服务器,这可能不是您想要的。

    【讨论】:

    • 谢谢。真正的问题是需要在属性中设置什么才能使 java 邮件尝试通过代理检索(或发送)?
    • 您是否阅读了常见问题解答条目?你确定你有 SOCKS 代理吗?
    • 不,我不确定。然而,这在此时无关紧要。这时候更重要的问题是为什么设置mail.pop3.socks.port和mail.pop3.socks.host没有效果。我有正确版本的 JVM 和 java 邮件。其他任何地方都没有设置 http 代理。在这一点上,我完全不知道为什么 POP3 服务器只是像没有代理一样接受连接并且工作方式相同。
    • 修正您对Session.getDefaultInstance 的使用。如果这没有帮助,请使用您当前使用的设置和JavaMail debug output 更新您的帖子。
    • 这实际上是一个 Maven 自动魔法问题。即使在清除 repo 后,它也拒绝下载我要求的 java 邮件 jar 版本。但这是另一件要尝试解决的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2011-03-28
    • 2018-01-09
    • 2012-09-16
    • 2010-12-10
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多