为什么我会得到这个例外?

时间:2011-07-23 17:49:48

标签: java javamail pop3 gmail-pop

此方法提供收件箱中的电子邮件数量。但是它给了我这个例外:

javax.mail.MessagingException: Connect failed;
 nested exception is:
java.net.ConnectException: Connection timed out: connecterror

-

 Session session = Session.getInstance(new Properties());
    try {
        Store store  = session.getStore("pop3");
        store.connect("pop.gmail.com" , "username" , "password");
        Folder fldr = store.getFolder("INBOX");
        fldr.open(Folder.READ_WRITE);
        int count = fldr.getMessageCount();
        System.out.println(count);
    } catch(Exception exc) {
        System.out.println(exc + "error");
    }    

4 个答案:

答案 0 :(得分:3)

可能是因为服务器拒绝连接。

尝试从“telnet”连接。一旦你可以连接,那么你应该可以从你的Java程序连接。

以下是一些问题排查提示:

答案 1 :(得分:3)

试试这个:

Properties props = new Properties();
props.put("mail.pop3.host" , "pop.gmail.com");
props.put("mail.pop3.user" , "username");
// Start SSL connection
props.put("mail.pop3.socketFactory" , 995 );
props.put("mail.pop3.socketFactory.class" , "javax.net.ssl.SSLSocketFactory" );
props.put("mail.pop3.port" , 995);

Session session = Session.getDefaultInstance(props , new Authenticator() {
    @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication( "username" , "password");
            }
});
try {
    Store store  = session.getStore("pop3");
    store.connect("pop.gmail.com" , "username" , "password");
    Folder fldr = store.getFolder("INBOX");
    fldr.open(Folder.HOLDS_MESSAGES);
    int count = fldr.getMessageCount();
    System.out.println(count);
} catch(Exception exc) {
    System.out.println(exc + " error");
}

另请访问this question

答案 2 :(得分:1)

尝试更改

store.connect("pop.gmail.com" , "username" , "password");

store.connect("pop.gmail.com" , 995, "username" , "password");

免责声明:我没有对此进行测试。

Gmail需要安全的SSL连接,并且javax.mail.Service可能没有提供。我认为更可能的解释是,您只是没有连接到正确的端口,因此我明确指定了Gmail POP3服务的正确端口号。

答案 3 :(得分:1)

尝试按照“如何将gmail用作smtp服务器”tutorial。 Google还有一个configuration page,其中包含您需要的所有设置。