Мне необходимо реализовать доступность и проверку подлинности серверов POP3, IMAP и SMTP-серверов путем подключения к ним, авторизации и сравнения ожидаемого вывода сервера с полученным выводом сервера при выполнении ранее упомянутых операций.
Я использую Java,чтобы не изобретать велосипед, я также использую реализацию javax.mail.Все работает нормально, за исключением того, что нет способа получить записанный вывод с сервера.Единственный доступный источник - выходные данные отладки:
Properties props = new Properties();
props.setProperty("mail.pop3.debug", "true");
Session session = Session.getInstance(props, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
session.setDebug(true);
session.setDebugOut(new PrintStream(out));
Store store = new POP3Store(session, getUrl());
store.connect();
store.close();
out.toString(); // < the only available communication output
Единственный способ получить выходные данные сервера - это проанализировать выходные данные отладки (поиск строк, начинающихся с «S:», и чтение строк до строки, начинающейся с"C:" или конец потока найден).
Пример выходных данных для отладки связи POP3 выглядит следующим образом:
DEBUG POP3: connecting to host "pop.gmail.com", port 995, isSSL true
S: +OK Gpop ready for requests from *** ***
C: CAPA
S: +OK Capability list follows
USER
RESP-CODES
EXPIRE 0
LOGIN-DELAY 300
X-GOOGLE-VERHOEVEN
UIDL
.
C: USER ***
S: +OK send PASS
C: PASS ***
S: +OK Welcome.
C: QUIT
S: +OK Farewell.
Единственная другая альтернатива, которую я вижу здесь, - это использование пользовательского SocketFactory (setСвойство "mail. *. socketFactory"), которое будет производить мой изначально установленный сокет, из которого я смогу получить поток ввода с сервера.
Я считаю, что есть лучшее решение для этого.Вы видите?
Заранее спасибо.