Java проверяет SMTP-сервер, используя telnet - PullRequest
0 голосов
/ 15 ноября 2018

Я использую библиотеку для проверки SMTP-соединения, чтобы проверить недействительные почтовые домены, чтобы избежать отправки почты и отказов, просто я использую telnet для имитации MAIL FROM: <{Address}> и RCPT TO: <{Address}>, используя BufferedWriter и BufferedReader следующим образом :

    private static void send(BufferedWriter wr, String text)
        throws IOException {
    wr.write(text + "\r\n");
    wr.flush();
    return;
}

    private static int receive(BufferedReader in) throws IOException {
    String line = null;
    int eCode = 0;
    while ((line = in.readLine()) != null) {
        String pfx = line.substring(0, 3);
        try {
            eCode = Integer.parseInt(pfx);
        } catch (Exception ex) {
            eCode = -1;
        }
        if (line.charAt(3) != '-') break;
    }
    return eCode;
}

звонит так:

 Socket skt = new Socket("gmail-smtp-in.l.google.com", 25);
 BufferedReader bufferedReader = new BufferedReader (new InputStreamReader(skt.getInputStream()));
 BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(skt.getOutputStream()));
 send(bufferedWriter, "MAIL FROM: <{Address}>");
 int status = receive(bufferedReader);
 send(bufferedWriter, "RCPT TO: <{Address}>");
 status = receive(bufferedReader);

единственная проблема, с которой я сталкиваюсь при таком подходе, - это производительность, поскольку MAIL FROM CMD обычно занимает 10 сек, а RCPT TO CMD - 20 сек ( вкл. терминал ) что слишком много, есть ли идея, как сделать это быстро или использовать другой механизм, чтобы добиться этого правильно за максимум 1 или 2 секунды?

...