Я нахожусь в процессе написания smtp-сервера и во время тестирования обнаружил, что при обмене данными с учетной записью почтового клиента, которая размещается на сервере Exchange, обработка протокола SMTP не выполняется. У меня есть ServerSocket, который я использую для приема входящих запросов на соединение:
ServerSocket sSocket = new ServerSocket(25);
Socket socket = sSocket.accept();
try (BufferedReader reader = new BufferedReader(new
InputStreamReader(this.socket.getInputStream()));
PrintWriter writer = new PrintWriter(this.socket.getOutputStream(), true)) {
writer.println("220 example.mailserver.com ESMTP Postfix");
String command = reader.readLine();
handle(command);
}
Протокол SMTP прост, после установления соединения сервер инициирует диалог с приветствием, а затем читает из входного потока. Клиентский сервер, который пытается отправить электронное письмо, обычно отправляет команду HELO или EHLO.
В случае сервера обмена чтение просто прекращается.
Я пытался используйте InputStream вместо BufferedReader и обрабатывайте конец строки самостоятельно. Я также попытался явно написать '\ r \ n "вместо использования println (" 220 пример ... "); я даже пытался перехватить исключение SocketTimeoutException, написать дополнение \ r \ n и повторить приветствие, но безрезультатно .
Кто-нибудь знает, что может ожидать отправляющий сервер Exchange? Ожидает ли он сначала другую команду вместо приветствия, которое я посылаю?
Я думал о проблемах кодировки символов, но потом Я думаю, что я все еще буду читать символы, но неправильно интерпретировать их.