首页 > 解决方案 > Java 使用 telnet 验证 SMTP 服务器

问题描述

我正在使用一个用于验证 SMTP 连接的库来测试无效的邮件域以避免发送邮件和退回邮件,我只是使用 telnet 来模拟MAIL FROM: <{Address}>RCPT TO: <{Address}>使用BufferedWriterBufferedReader如下所示:

    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 FROMCMD 通常需要10秒而RCPT TOCMD 需要20秒(在终端上),这太多了,是否有一个如何快速做到这一点或使用另一种机制来实现的想法最多在 1 或 2 秒内正确吗?

标签: javaperformancesmtptelnetemail-bounces

解决方案


推荐阅读