title: JavaMail: Socket read timeout
body: <p>I'm using JavaMail and I want it to work through proxy for every threads (I have multithreading application). I'm using SMTPTransport.connect(Socket socket) for this.</p>
  
  <p>Here is socket initialization:</p>
  
  <pre><code>socket = new Socket();
  socket.setSoTimeout(10000);
  socket.connect(new InetSocketAddress(smtpHost, smtpPort));
  </code></pre>
  
  <p>Here is SMTPTransport call:</p>
  
  <pre><code>SMTPTransport transport = null;
  try
      {
       transport = (SMTPTransport) mail.getTransport("smtp");
       transport.connect(socket);
       System.out.println("ok");
  </code></pre>
  
  <p>And so on. But I this error happens:</p>
  
  <blockquote>
    <p>DEBUG: JavaMail version 1.4.4 DEBUG: successfully loaded resource:
    /META-INF/javamail.default.providers DEBUG: Tables of loaded providers
    DEBUG: Providers Listed By Class Name:
    {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
    Microsystems, Inc],
    com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
    Microsystems, Inc],
    com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun
    Microsystems, Inc],
    com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun
    Microsystems, Inc],
    com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun
    Microsystems, Inc],
    com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun
    Microsystems, Inc]} DEBUG: Providers Listed By Protocol:
    {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun
    Microsystems, Inc],
    imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun
    Microsystems, Inc],
    smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
    Microsystems, Inc],
    pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun
    Microsystems, Inc],
    pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun
    Microsystems, Inc],
    smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
    Microsystems, Inc]} DEBUG: successfully loaded resource:
    /META-INF/javamail.default.address.map DEBUG: getProvider() returning
    javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
    Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP:
    useEhlo true, useAuth true DEBUG SMTP: starting protocol to host
    "smtp.googlemail.com", port 465 DEBUG SMTP: exception reading
    response: java.net.SocketTimeoutException: Read timed out Exception
    reading response javax.mail.MessagingException: Exception reading
    response;   nested exception is:  java.net.SocketTimeoutException:
    Read timed out    at
    com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2153)
      at
    com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1956)
      at
    com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:636)
      at javax.mail.Service.connect(Service.java:317)     at
    javax.mail.Service.connect(Service.java:176)  at
    javax.mail.Service.connect(Service.java:125)  at
    com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:274)   at
    lsmtpc.CheckAccount.run(CheckAccount.java:203)    at
    java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
      at java.util.concurrent.FutureTask.run(FutureTask.java:166)     at
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
      at
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
      at java.lang.Thread.run(Thread.java:722) Caused by:
    java.net.SocketTimeoutException: Read timed out   at
    java.net.SocketInputStream.socketRead0(Native Method)     at
    java.net.SocketInputStream.read(SocketInputStream.java:150)   at
    java.net.SocketInputStream.read(SocketInputStream.java:121)   at
    com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:110)    at
    java.io.BufferedInputStream.fill(BufferedInputStream.java:235)    at
    java.io.BufferedInputStream.read(BufferedInputStream.java:254)    at
    com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:89)
      at
    com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2131)
      ... 13 more</p>
  </blockquote>
  
  <p>So as I see JavaMail can't read from socket. So what am I doing wrong? If I try to use transport.connect() method without using Socket in constructor all works perfectly and smtpHost/smtpPort are accessible from the telnet and I have no any firewalls/antiviruses.</p>