我正在尝试使用socket(而不是java mail api)使用java访问我的gmail收件箱。 我成功建立连接但无法识别选择收件箱命令。这是我的代码。和我得到的输出。
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 my-mail@gmail.com my-name my-surname authenticated (Success)
可能是什么问题?登录工作但选择不起作用。我试过starttls,它也行不通。
答案 0 :(得分:1)
因为你做错了:)
005 SELECT myinbox
会做你想做的事。
测试这些事情的好方法是使用openssl
openssl s_client -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命令之前验证你 - 这就是为什么错误在你的登录结果之前回来的原因输出