##
MINIMO CLIENTE SMTP

Vamos a desarrollar un mínimo cliente SMTP (simple mail transfer protocol), de forma que podamos encapsular todos los datos en la aplicación. El código es libre de modificación para las necesidades que sean; por ejemplo, una modificación interesante sería que aceptase argumentos desde la línea de comandos y también capturase el texto del mensaje desde la entrada estándar del sistema. Con estas modificaciones tendríamos casi la misma aplicación de correo que utiliza Unix. Veamos el código de nuestro cliente, smtpCliente.java:

    import java.net.*;
    import java.io.*;

    class smtpCliente {
        public static void main( String args[] ) {
            Socket s = null;
            DataInputStream sIn = null;
            DataOutputStream sOut = null;

            // Abrimos una conexión con breogan en el puerto 25
            // que es el correspondiente al protocolo smtp, e intentamos
            // abrir los streams de entrada y salida
            try {
                s = new Socket( "breogan",25 );
                sIn = new DataInputStream( s.getInputStream() );
                sOut = new DataOutputStream( s.getOutputStream() );
            } catch( UnknownHostException e ) {
                System.out.println( "No conozco el host" );
            } catch( IOException e ) {
                System.out.println( e );
                }

            // Si todo está inicializado correctamente, vamos a escribir
            // algunos datos en el canal de salida que se ha establecido
            // con el puerto del protocolo smtp del servidor
            if( s != null && sIn != null && sOut != null )
                {
                try {
                    // Tenemos que respetar la especificación SMTP dada en
                    // RFC1822/3, de forma que lo que va en mayúsculas
                    // antes de los dos puntos tiene un significado especial
                    // en el protocolo
                    sOut.writeBytes( "MAIL From: froufe@arrakis.es\n" );
                    sOut.writeBytes( "RCPT To: froufe@arrakis.es\n" );
                    sOut.writeBytes( "DATA\n" );
                    sOut.writeBytes( "From: froufe@arrakis.es\n" );
                    sOut.writeBytes( "Subject: Pruebas\n" );
                    // Ahora el cuerpo del mensaje
                    sOut.writeBytes( "Hola, desde el Tutorial de Java\n" );
                    sOut.writeBytes( "\n.\n" );

                    // Nos quedamos a la espera de recibir el "Ok" del
                    // servidor para saber que ha recibido el mensaje
                    // correctamente, momento en el cual cortamos
                    String respuesta;
                    while( ( respuesta = sIn.readLine() ) != null )
                        {
                        System.out.println( "Servidor: "+respuesta );
                        if( respuesta.indexOf( "Ok" ) != -1 )
                            break;
                        }

                    // Cerramos todo lo que hemos abierto
                    sOut.close();
                    sIn.close();
                    s.close();
                  } catch( UnknownHostException e ) {
                    System.out.println( "Intentando conectar: "+e );
                } catch( IOException e ) {
                    System.out.println( e );
                    }
                }
            }
        }

|  | ##### [Anterior] [Indice] [Siguiente]