2013-05-30 58 views
0

我正在寫imap郵件檢查器。 我有這樣的事情:如何發送IMAP - 使用java和端口143的命令

tcpSocket = new Socket(); 
tcpSocket.connect(new InetSocketAddress(Config.HOST, 143)); 
... 
// greeting message from server 
String answer = socketBufferedReader.readLine(); 
// try to login 
socketBufferedWriter.write("A001 login my_login password\n"); 
socketBufferedWriter.flush(); 
// get answer 
answer = socketBufferedReader.readLine(); 

在最後一個代碼的路線PROGRAMM被阻止。當超時通過時,我會得到答案「* BYE autologout閒置太久」。

我不明白什麼是錯的。我想我使用錯誤的格式的命令,但我不知道

+1

爲什麼不使用像[commons-net](http://commons.apache.org/proper/commons-net/)這樣的現有庫而不是從頭開始編寫某些東西? – gma

+0

我注意到你應該用'\ n'而不是'\ r \ n'來終止你的命令,但這可能是也可能不是失敗的原因。也許您需要在發送命令之前監聽服務器的歡迎橫幅(並使用它來驗證您要使用的登錄類型是否受支持)?此外,您應該實施STARTTLS,否則您將以明文發送登錄憑證。最後,爲了正確完成所有這些,我必須迴應@ gma建議使用現有的庫。 – Celada

回答

2

IMAP絕對要求行結束是\ r \ n,而不是\ n。這適用於很多其他郵件協議。