2013-05-30 53 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。这适用于很多其他邮件协议。