当前位置: 首页 > 知识库问答 >
问题:

SMTP/POP3通过代理System.getProperties()与new Properties()?

姜奇
2023-03-14

Im正试图通过代理从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()?每个会话实例都将保留对System.Properties的引用。因此,每次尝试创建一个新的会话实例或以任何方式更改System.getProperties()时,每个会话实例都会受到影响,因此您最好重用相同的会话实例。

javamail是否需要在System.Properties中特别设置一些内容,而不是传递给Session的内容?

另外,为了让javamail使用代理,您需要设置哪些参数?System.Properties有什么使它工作起来不像我的新属性?一个很好的教程或文档的链接来解释它将非常感谢。

谢谢!

共有1个答案

邓德厚
2023-03-14

首先,摆脱所有插座工厂的东西,你不需要它。

接下来,确保您真正拥有一个SOCKS代理,而不仅仅是一个web代理。如果需要,请参阅以下JavaMail FAQ条目。

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

 类似资料:
  • 本文向大家介绍SMTP和POP3之间的区别,包括了SMTP和POP3之间的区别的使用技巧和注意事项,需要的朋友参考一下 SMTP和POP3都是在邮件服务器之间发送和接收消息所必需的消息协议。根据设计这些协议的性质和任务,我们可以区分它们。 以下是SMTP和POP3协议之间的重要区别。 序号 键 SMTP协议 POP3协议 1 定义 SMTP也称为简单邮件传输协议,它是TCP / IP协议应用程序层

  • 问题内容: 在程序中使用用户身份验证的代理的最佳/最简便方法是什么?我目前有这个,但是打开浏览器时我需要输入用户名和密码。 问题答案: 您可以使用Proxy Auto auth插件实现相同的功能 使用以下扩展程序下载扩展程序 https://chrome.google.com/webstore/detail/get- crx/dijpllakibenlejkbajahncialkbdkjc/rel

  • 我想使用casperjs/phantomjs自动填充一些web表单。为了调试我的casperjs脚本,我想使用(很棒的)Charles Web代理作为中间人SSL代理,但还没有弄清楚如何在casperjs/phantomjs中实现这一点。 我已经允许Charles在Firefox和远程服务器之间进行代理。浏览器和远程服务器都接受SSL证书,Charles正确解码HTTPS数据包,以便我可以看到浏览

  • 下面是错误和超时异常。 输入代码: 调试SMTP:正在尝试连接到主机“SMTP.gmail.com”,端口587,isSSL true Exceptioninthread“main”java。lang.RuntimeException:com。太阳邮政util。MailConnectException:无法连接到主机,端口:smtp。gmail。com,587;超时-1。

  • 问题内容: 我面临着Java6 / 8的奇怪行为。我尝试通过需要基本用户身份验证的代理进行隧道传输。通过标准的Java身份验证器执行此操作。如果我尝试访问https网址作为第一个网址,则会引发异常: java.io.IOException:无法通过代理隧道。代理返回“需要HTTP / 1.1 407代理身份验证” 但是,如果我先访问http URL,然后再访问https URL,则https访问正

  • 邮局协议(POP)是本地电子邮件客户端用于通过TCP/IP连接从远程服务器检索电子邮件的应用程序层Internet标准协议。 POP支持访问远程邮箱的简单下载和删除要求。 POP3服务器侦听已知端口110。 软件包com.sun.mail.pop3是JavaMail API的POP3协议提供程序,提供对POP3消息存储的访问。 下表列出了此包中的类: 名称 描述 POP3Folder POP3文件