#java #email #sockets #gmail #imap
#java #Адрес электронной почты #сокеты #gmail #imap
Вопрос:
я пытаюсь получить доступ к своему почтовому ящику gmail с помощью Java с помощью socket (не Java mail api). я успешно устанавливаю соединение, но команда «Выбрать входящие» не распознается. вот мой код. и результат, который я получаю.
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 , он также не работает.
Ответ №1:
Потому что вы делаете это неправильно 🙂
005 SELECT myinbox
будет делать то, что вы пытаетесь сделать.
Отличный способ проверить подобные вещи — использовать openssl
openssl s_client -crlf -connect imap.gmail.com:993
вот пример использования моей учетной записи gmail. Мои черновики перечислены как:
* СПИСОК ( 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 является асинхронным, и вы не ждете, пока он аутентифицирует вас перед отправкой команды выбора — вот почему ошибка возвращается до того, как результат входа в ваш вывод
Комментарии:
1. На самом деле… вы знаете, что, по моему мнению, происходит; сервер imap является асинхронным, и вы не ждете, пока он аутентифицирует вас перед отправкой
select
команды — вот почему ошибка возвращается до того, как результат входа в ваш вывод. Опять же, вы можете проверить свои реальные команды, подключившись напрямую к серверу imap.2. как вы сказали, я не загрузил openssl и не подключился к параметрам, которые вы мне дали. я могу подключить свою учетную запись, но снова после команды входа в систему команда выбора выдает ошибку неправильной команды
3. вот что я набираю и что я получаю:openssl s_client -crlf -connect imap.gmail.com: 993 СЕРВЕР: здесь много материала, и в конце OK Gimap готов к запросам с моего ip здесь Я: A001 LOGIN my-email my-pass SERVER: НЕВЕРНЫЙ НЕДОПУСТИМЫЙ ТЕГ o23123123bkg. 1 ВОЗМОЖНОСТЬ IMAP4rev1 ОТМЕНИТЬ ВЫБОР ID КВОТЫ ПРОСТРАНСТВА ИМЕН В РЕЖИМЕ ОЖИДАНИЯ XLIST ДОЧЕРНИЕ ЭЛЕМЕНТЫ X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ADD01 OK мой-email-здесь мое-имя моя-фамилия аутентифицирован (успешно) Я: A002 ВЫБЕРИТЕ сервер входящих сообщений: ОШИБКА Не удалось разобрать команду
4. Хорошо, дело было в асинхронном сервере imap. thread.sleep (2000) просто отлично работал после входа в мою учетную запись