0

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

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

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

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

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

有人治疗过这个问题吗?你如何解决它?

概括

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

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

我在寻找什么?一种避免此代理的方法。有人讲述了一个习俗SocketFactory(但我不确定这是否有效)。我找不到 Javamail 的任何替代品。

问候!!

4

4 回答 4

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之类的东西。

于 2016-07-07T19:22:35.847 回答
0

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

一个很好的副作用可能是以您公司的名义发送的电子邮件也由您的公司发送。如果邮件管理员正确设置了SPF 记录,它将大大降低您的电子邮件最终进入某人的垃圾/垃圾邮件文件夹的风险。

于 2015-09-24T08:45:21.373 回答
0

使用您自己的邮件服务器通常是最好的解决方案,但如果您没有自己的邮件服务器,JavaMail FAQ描述了其他解决方案,例如使用Corkscrew或通过您的 Web 代理服务器连接工作。

于 2015-09-24T20:34:59.167 回答
0

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

于 2018-10-17T13:19:27.790 回答