JavaMail store.connect() times out - Can't read gmail Inbox through Java

viv picture viv · Oct 8, 2012 · Viewed 8.1k times · Source

I am trying to connect to my gmail inbox to read messages through Java Application. I am using..

  • jdk1.6.0_13
  • javamail-1.4.3 libs - (mail.jar, mailapi.jar, imap.jar)

Below is my code : MailReader.java

import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;

public class MailReader
{
    public static void main(String[] args)
    {
        readMail();     
    }

    public static void readMail()
    {
        Properties props = System.getProperties();
        props.setProperty("mail.store.protocol", "imaps");
        try
        {
            Session session = Session.getDefaultInstance(props, null);
            Store store = session.getStore("imaps");
            store.connect("imap.gmail.com", "[email protected]", "myPwd");
            System.out.println("Store Connected..");

            //inbox = (Folder) store.getFolder("Inbox");
            //inbox.open(Folder.READ_WRITE);
            //Further processing of inbox....
        }
        catch (MessagingException e)
        {
            e.printStackTrace();            
        }
    }
}

I expect to get store connected, but call to store.connect() never returns and I get below output :


javax.mail.MessagingException: Connection timed out;
nested exception is:
java.net.ConnectException: Connection timed out
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:441)
at javax.mail.Service.connect(Service.java:233)
at javax.mail.Service.connect(Service.java:134)
at ReadMail.readMail(ReadMail.java:21)
at ReadMail.main(ReadMail.java:10)

However I am able to SEND email by Java using SMTP, Transport.send() and same gmail account. But cannot read emails. What can be the solution ?

Answer

Brian Agnew picture Brian Agnew · Oct 8, 2012

IMAP work off a different port (143 for non-secure, 993 for secure) to sendmail (25) and I suspect that's blocked. Can you telnet on that port to that server e.g.

telnet imap.gmail.com {port number}

That'll indicate if you have network connectivity.