Receiving email using Imap through SSL connection using javax.mail

Ricky picture Ricky · Aug 1, 2017 · Viewed 10.6k times · Source

I want to receive emails using imap trough secure connection. I implemented it using using javax.mail api. But there are different server configurations. As I found

1)  store = session.getStore(imaps);
    store.connect(imap.gmail.com, username, password)

Which make 'isSSL' true and use port 993 which is secure port to connect in javax.mail. Following configuration also prove secure connection through 993 port.

 2) properties.put("mail.imap.host", imap.gmail.com);
    properties.put("mail.imap.port", "993");
    Properties.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    properties.setProperty("mail.imap.socketFactory.fallback","false");
    Properties.setProperty("mail.imap.socketFactory.port", 993);

These two methods work fine. Can you please tell me what is different between these two and what is the correct way to receive messages through secure connection. Futher I found; "mail.imap.ssl.enable" and "mail.imap.starttls.enable. Can you tell me whether i needed these two also.

Answer

RenRen picture RenRen · Jul 10, 2018

Setting various socketFactory properties. Long, long ago JavaMail didn't have built in support for SSL connections, so it was necessary to set these properties to use SSL. This hasn't been the case for years; remove these properties and simplify your code. The easiest way to enable SSL support in current versions of JavaMail is to set the property "mail.smtp.ssl.enable" to "true". (Replace "smtp" with "imap" or "pop3" as appropriate.) https://javaee.github.io/javamail/FAQ#commonmistakes

String host = "mail.example.com";
String username = "[email protected]";
String password = "mysecretpassword";

Properties props = new Properties();
props.setProperty("mail.imap.ssl.enable", "true");

Session session = javax.mail.Session.getInstance(props);
Store store = session.getStore("imap");
store.connect(host, username, password);

Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
Message[] messages = inbox.getMessages();


inbox.close(false);
store.close();