通过代理

时间:2015-09-24 07:39:01

标签: java email proxy javamail socketfactory

我有一个Java应用程序,它使用Javamail(v.1.5.4)将邮件发送和审阅到POP / SMTP邮件服务器。此应用程序必须在我们的公司网络中运行,我们有一个阻止我的请求的代理(f * ck!)。我搜索了可能的解决方案,Javamail说我们可以使用SOCKS5:

  

问:如何配置JavaMail以通过我的代理服务器工作? [更新!]

     

答:JavaMail目前不支持通过Web代理服务器访问邮件服务器。使用代理服务器的一个主要原因是允许来自公司网络内的HTTP请求通过公司防火墙。防火墙通常会阻止对Internet的大多数访问,但允许来自代理服务器的请求通过。此外,企业网络内的邮件服务器将执行类似的电子邮件功能,通过SMTP接收邮件并将其转发到Internet上的最终目的地,并接受传入邮件并将其发送到相应的内部邮件服务器。

该解决方案对我无效,所以我必须寻找新的替代方案。有人说他们实现了自定义SocketFactory,但我不确定这是否足够。有人尝试过吗?

另一种可能的解决方案可能是使用另一个库,但我找不到任何可以避免此代理的内容。

有没有人对待这个问题?你是如何解决的?

摘要

问题:我必须在Java应用程序中发送和阅读电子邮件,但我的代理会阻止请求。

我尝试了什么?使用javamail,我尝试过使用SOCKS5解决方案,但没有效果。

我在寻找什么?一种避免此代理的方法。有人告诉自定义SocketFactory(但我不确定这是否有效)。我没有找到任何替代Javamail的方法。

此致!!

4 个答案:

答案 0 :(得分:1)

实际上,JavaMail支持SOCKS代理,而不支持经过身份验证的代理。

  

该解决方案对我无效

但你没有解释原因。

使用SOCKS代理(甚至经过身份验证的代理)配置Java Mail的另一种方法是不涉及配置自己的套接字工厂。有一个名为Simple Java Mail的开源库(完全披露:我维护它),它非常简单易用:

new Mailer(
        new ServerConfig("smtp.host.com", 587, "user@host.com", "password"),
        TransportStrategy.SMTP_TLS,
        new ProxyConfig("socksproxy.host.com", 1080, "proxy user", "proxy password")
).sendMail(email);

但是,如果您的代理实际上是一个HTTP代理,那么您运气不好,需要使用Corkscrewconnect之类的内容。

答案 1 :(得分:0)

虽然它不是程序化解决方案,但最简单的方法是检查您的公司是否有内部邮件服务器并使用该服务器发送您的电子邮件。它不需要使用SOCKS或代理,只需配置。

一个很好的副作用可能是贵公司发送的电子邮件也是由贵公司发送的。如果邮件管理员已正确设置SPF records,则可以大大降低您的电子邮件最终落入某人的垃圾邮件/垃圾邮件文件夹的风险。

答案 2 :(得分:0)

使用您自己的邮件服务器通常是最佳解决方案,但如果您没有自己的邮件服务器,则JavaMail FAQ会介绍其他解决方案,例如使用Corkscrew或{{3}通过您的Web代理服务器工作。

答案 3 :(得分:0)

根据Javamail API 1.6.2的最新版本,JavaMail支持通过Web代理服务器访问邮件服务器,并支持对代理服务器的身份验证。在stackoverflow.com/questions/36278073/how-to-let-javamail-support-http-proxy/52855090#52855090

中查看我的答案