Pablo D
Pablo D

Reputation: 393

Use Javamail through a proxy

I have a Java application which uses Javamail (v.1.5.4) for send and review mails into a POP/SMTP mail server. This application must run in our coporate network, where we have a proxy (f*ck!) that blocks my requests. I have googled possible solutions and Javamail says that we can use SOCKS5:

Q: How do I configure JavaMail to work through my proxy server? [updated!]

A: JavaMail does not currently support accessing mail servers through a web proxy server. One of the major reasons for using a proxy server is to allow HTTP requests from within a corporate network to pass through a corporate firewall. The firewall will typically block most access to the Internet, but will allow requests from the proxy server to pass through. In addition, a mail server inside the corporate network will perform a similar function for email, accepting messages via SMTP and forwarding them to their ultimate destination on the Internet, and accepting incoming messages and sending them to the appropriate internal mail server.

That solution is not valid for me, so I have to look for new alternatives. Some people say that they implements a custom SocketFactory, but I am not sure if that is enough. Someone has tried?

Another possible solution could be use another library, but I don't find anything that could avoid this proxy.

Has anyone treat this problem? How do you solve it?

Summary

Problem: I have to send and read e-mails in a Java application, but my proxy blocks the requests.

What I have tried? Using javamail, I have tried to use SOCKS5 solution, but with no effect.

What I am looking for? A way to avoid this proxy. Someone tells about a custom SocketFactory(but I am not sure if this is valid). I don't find any alternative to Javamail.

Regards!!

Upvotes: 0

Views: 2304

Answers (4)

Katighar Umesh
Katighar Umesh

Reputation: 67

As per the latest release of Javamail API 1.6.2 , JavaMail supports accessing mail servers through a web proxy server and also authenticating to the proxy server. See my answer here stackoverflow.com/questions/36278073/how-to-let-javamail-support-http-proxy/52855090#52855090

Upvotes: 0

Benny Bottema
Benny Bottema

Reputation: 11493

Actually JavaMail does support SOCKS proxy, just not authenticated proxies.

That solution is not valid for me

But you don't explain why.

There's another way of configuring Java Mail with SOCKS proxy (even authenticated one) that doesn't involve configuring your own socket factory. There's an open source library called Simple Java Mail (full disclosure: I maintain it), which is really simple to use:

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

However, if your proxy is actually an HTTP proxy, you're out of luck and you will need to resort to something like Corkscrew or connect.

Upvotes: 1

Bill Shannon
Bill Shannon

Reputation: 29971

Using your own mail server is generally the best solution, but if you don't have your own mail server the JavaMail FAQ describes other solutions, such as using Corkscrew or connect to work through your web proxy server.

Upvotes: 0

mthmulders
mthmulders

Reputation: 9705

Although it's not a programmatic solution, the cleanest way would be to check if your company has an internal mail server and use that one to send your emails. It doesn't require using SOCKS or proxies, just configuration.

A nice side-effect may be that emails sent in name of your company are also sent by your company. If the mail administrators have set-up SPF records correctly, it greatly reduces the risk of your emails ending up in someone's junk / spam folder.

Upvotes: 0

Related Questions