2011-10-19 45 views
0

我想通過使用套接字(而不是Java郵件API)訪問我的Gmail與Gmail的收件箱。 我成功建立連接,但選擇收件箱命令無法識別。這是我的代碼。和我得到的輸出。gmail imap bad unknown命令在java

SSLSocketFactory sslsocketfactory = HttpsURLConnection.getDefaultSSLSocketFactory(); 
    SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("imap.gmail.com", 993); 

    BufferedReader sin = new BufferedReader(new InputStreamReader(sslsocket.getInputStream())); 
    PrintWriter output = new PrintWriter(new OutputStreamWriter(sslsocket.getOutputStream())); 

String line; 
output.println("A004 LOGIN my-mail-here my-pass-here"); 
    output.println("A005 SELECT [GMAIL]/myinbox"); 
    output.println("A006 LOGOUT"); 
    output.flush(); 
    while ((line = sin.readLine()) != null) 
    System.out.println(line); 

,這裏是輸出我得到:

* OK Gimap ready for requests from 78.185.154.27 o19if1214052bkq.44 
A005 BAD Unknown command o19if1214052bkq.44 
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE 
A004 OK [email protected] my-name my-surname authenticated (Success) 

可能是什麼問題?登錄工作但選擇不起作用。我試過starttls,它也不起作用。

回答

1

因爲你就錯了:)

005 SELECT myinbox 

會做你正在嘗試做的。

一個偉大的方式來測試這些事情是使用OpenSSL

的OpenSSL的s_client.First -crlf -connect imap.gmail.com:993

這裏是一個使用我的Gmail帳戶的例子。我的草稿被列爲:

* LIST(\ HasChildren \ HasNoChildren) 「/」 「的[Gmail] /草稿」

003 select Drafts 
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen $MDNSent Junk $Forwarded NonJunk) 
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $MDNSent Junk $Forwarded NonJunk \*)] Flags permitted. 
* OK [UIDVALIDITY 620224742] UIDs valid. 
* 0 EXISTS 
* 0 RECENT 
* OK [UIDNEXT 25] Predicted next UID. 
003 OK [READ-WRITE] Drafts selected. (Success) 

話雖這麼說,我認爲正在發生的是imap服務器是異步的,並且在發送select命令之前,您並不等待它對您進行身份驗證 - 這就是爲什麼在輸出登錄結果之前錯誤再次出現的原因

+0

samet output.println錯誤(「A005 SELECT INBOX「); – nazgulll

+0

其實......你知道我在想什麼, imap服務器是異步的,並且在發送'select'命令之前,您並不等待它對您進行身份驗證 - 這就是爲什麼在輸出登錄結果之前錯誤會再次出現。再次,您可以通過直接連接到imap服務器來測試您的實際命令。 –

+0

正如你所說我donwloaded openssl並連接你給我的參數。我可以連接我的帳戶,但登錄命令後,再次選擇命令給我一個錯誤的命令錯誤 – nazgulll