Я получил задание сделать простого клиента отправителя SMTP-почты без использования какой-либо предварительно реализованной внешней библиотеки. Сервер, который должен получать мои сообщения - это FakeSMTP (http://nilhcem.com/FakeSMTP/), который работает на локальном хосте. Когда я пытаюсь отправить сообщение, я получаю следующую ошибку:
220 DESKTOP-T6LJE71 ESMTP SubEthaSMTP null
421 Timeout waiting for data from client.
Error while sending email
java.net.SocketException: An established connection was aborted by the software in your host machine
Мой код:
public class SMTP {
public static void sendHeader(DataOutputStream msgToSend, BufferedReader responseFromServer) throws IOException {
System.out.println(responseFromServer.readLine());
msgToSend.writeBytes("HELO\n");
System.out.println(responseFromServer.readLine());
msgToSend.writeBytes("MAIL FROM:<something@gmail.com>\n");
System.out.println(responseFromServer.readLine());
msgToSend.writeBytes("RCPT TO:<anything@gmail.com>\n");
System.out.println(responseFromServer.readLine());
msgToSend.writeBytes("DATA\n");
System.out.println(responseFromServer.readLine());
}
public static void sendContent(DataOutputStream msgToSend, BufferedReader responseFromServer) throws IOException {
msgToSend.writeBytes("From:<something@gmail.com>\n");
msgToSend.writeBytes("To:<anything@gmail.com>\n");
msgToSend.writeBytes("Subject:Test\n");
msgToSend.writeBytes("Hello world.\n");
msgToSend.writeBytes("Hello world.\n");
msgToSend.writeBytes("Hello world.\n");
msgToSend.writeBytes(".\n");
System.out.println(responseFromServer.readLine());
msgToSend.writeBytes("QUIT\n");
System.out.println(responseFromServer.readLine());
System.out.println("Closing connection");
}
public static void main(String args[]) throws Exception{
try{
Socket serverSocket=new Socket("localhost",25);
BufferedReader responseFromServer=new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
DataOutputStream messageToServer = new DataOutputStream(serverSocket.getOutputStream());
sendHeader(messageToServer,responseFromServer);
sendContent(messageToServer, responseFromServer);
}
catch (Exception e){
System.out.println("Error while sending email");
System.out.println(e);
}
}
}
Я не могу выяснить, в чем проблема. Любая помощь приветствуется, спасибо и хорошего дня:)