无法使用Java连接到我的Gmail收件箱

时间:2011-11-10 10:41:11

标签: java

我正在尝试使用google找到的此代码,但它没有连接到我的gmail收件箱。为什么呢?

我有以下错误消息:

 --------------processing mails started-----------------
    getting the session for accessing email.
    Not able to process the mail reading.
    javax.mail.MessagingException: Connection timed out: connect;
      nested exception is:
        java.net.ConnectException: Connection timed out: connect
        at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:618)
        at javax.mail.Service.connect(Service.java:291)
        at javax.mail.Service.connect(Service.java:172)
        at readEmails.processMail(readEmails.java:47)
        at readEmails.(readEmails.java:19)
        at readEmails.main(readEmails.java:165)
    Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
        at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
        at com.sun.mail.iap.Protocol.(Protocol.java:109)
        at com.sun.mail.imap.protocol.IMAPProtocol.(IMAPProtocol.java:104)
        at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:585)

代码是:

import javax.mail.AuthenticationFailedException;
import javax.mail.Folder;
import javax.mail.FolderClosedException;
import javax.mail.FolderNotFoundException;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.ReadOnlyFolderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.StoreClosedException;
import javax.mail.internet.InternetAddress;

public class readEmails {

//Constructor Call
public readEmails() {
   processMail();
}

//Responsible for printing Data to Console
private void printData(String data) {
   System.out.println(data);
}

public void processMail() {
   Session session = null;
   Store store = null;
   Folder folder = null;
   Message message = null;
   Message[] messages = null;
   Object messagecontentObject = null;
   String sender = null;
   String subject = null;
   Multipart multipart = null;
   Part part = null;
   String contentType = null;

   try {
      printData("--------------processing mails started-----------------");
      session = Session.getDefaultInstance(System.getProperties(), null);

      printData("getting the session for accessing email.");
      store = session.getStore("imap");

      store.connect("imap.gmail.com","myemail@gmail.com","mypassword");
      printData("Connection established with IMAP server.");

      // Get a handle on the default folder
      folder = store.getDefaultFolder();

      printData("Getting the Inbox folder.");

      // Retrieve the "Inbox"
      folder = folder.getFolder("inbox");

      //Reading the Email Index in Read / Write Mode
      folder.open(Folder.READ_WRITE);

      // Retrieve the messages
      messages = folder.getMessages();

      // Loop over all of the messages
      for (int messageNumber = 0; messageNumber < messages.length; messageNumber++) {
           // Retrieve the next message to be read
       message = messages[messageNumber];

           // Retrieve the message content
           messagecontentObject = message.getContent();

           // Determine email type
           if (messagecontentObject instanceof Multipart) {
               printData("Found Email with Attachment");
               sender = ((InternetAddress) message.getFrom()[0]).getPersonal();

               // If the "personal" information has no entry, check the address for the sender information
               printData("If the personal information has no entry, check the address for the sender information.");

           if (sender == null) {
           sender = ((InternetAddress) message.getFrom()[0]).getAddress();
           printData("sender in NULL. Printing Address:" + sender);
           }
               printData("Sender -." + sender);

               // Get the subject information
               subject = message.getSubject();

               printData("subject=" + subject);

               // Retrieve the Multipart object from the message
               multipart = (Multipart) message.getContent();

               printData("Retrieve the Multipart object from the message");

               // Loop over the parts of the email
               for (int i = 0; i < multipart.getCount(); i++) {
                    // Retrieve the next part
                    part = multipart.getBodyPart(i);

                    // Get the content type
                    contentType = part.getContentType();

                   // Display the content type
           printData("Content: " + contentType);

                   if (contentType.startsWith("text/plain")) {
            printData("---------reading content type text/plain  mail -------------");
           } else {
            // Retrieve the file name
            String fileName = part.getFileName();
            printData("retrive the fileName="+ fileName);
           }
          }
       } else {
          printData("Found Mail Without Attachment");
          sender = ((InternetAddress) message.getFrom()[0]).getPersonal();

              // If the "personal" information has no entry, check the address for the sender information
          printData("If the personal information has no entry, check the address for the sender information.");

              if (sender == null) {
        sender = ((InternetAddress) message.getFrom()[0]).getAddress();
        printData("sender in NULL. Printing Address:" + sender);
         }

             // Get the subject information
         subject = message.getSubject();
         printData("subject=" + subject);
     }
      }

      // Close the folder
      folder.close(true);

      // Close the message store
      store.close();
  } catch(AuthenticationFailedException e) {
     printData("Not able to process the mail reading.");
     e.printStackTrace();
  } catch(FolderClosedException e) {
     printData("Not able to process the mail reading.");
     e.printStackTrace();
  } catch(FolderNotFoundException e) {
     printData("Not able to process the mail reading.");
     e.printStackTrace();
  }  catch(NoSuchProviderException e) {
     printData("Not able to process the mail reading.");
     e.printStackTrace();
  } catch(ReadOnlyFolderException e) {
     printData("Not able to process the mail reading.");
     e.printStackTrace();
  } catch(StoreClosedException e) {
     printData("Not able to process the mail reading.");
     e.printStackTrace();
  } catch (Exception e) {
     printData("Not able to process the mail reading.");
     e.printStackTrace();
  }
}

//Main  Function for The readEmail Class
public static void main(String args[]) {
    //Creating new readEmail Object
    readEmails readMail = new readEmails();

    //Calling processMail Function to read from IMAP Account
    readMail.processMail();
}

}

1 个答案:

答案 0 :(得分:2)

您正在使用协议imap(没有SSL的IMAP)进行连接,这是GMail不支持的。您需要使用imaps(带有SSL的IMAP)。

请参阅GMail helpJavaMail FAQ entry on GMail