Cómo enviar Correo Electrónico a mano, Parte II: SMTP Autenticado

NOTA: Este post fue publicado originalmente en mi anterior blog el
11/08/2007

En un artículo anterior aprendimos cómo enviar un correo electrónico a mano, es decir, utilizando solamente la línea de comandos y las instrucciones del protocolo SMTP. 

La gran mayoría de los servidores SMTP del mundo piden credenciales a los clientes que tratan de enviar correos a través de ellos, cuando el correo no está dirigido al dominio SMTP de éste (algunos simplemente las exigen, como espero mostrarles en una futura sección de Antispam), por esta razón en esta segunda parte veremos cómo es el procedimiento para enviar correo electrónico autentificándonos en el servidor, es decir, entregando nuestros nombre de usuario y contraseña durante la sesión SMTP. 

Los detalles sobre cómo es una sesión SMTP pueden verlos en el post sobre cómo enviar un correo electrónico a mano, por lo que ahora nos centraremos en la parte de la autenticación.

Primero, desde una línea de comandos, hay que conectarse al Servidor SMTP usando:

telnet <Servidor_SMTP> 25

Como respuesta obtendremos un banner similar a este:

image

Los pasos a seguir son:

1. Saludo al Servidor. Ahora, saludaremos al servidor con un comando EHLO, en vez de HELO. Esto no es dislexia (ni disteclia), sino que es una abreviación de Extended HELO ;).
En el Banner vimos que el Servidor es un Servidor que soporta Extended SMTP (ESMTP), por lo que como respuesta a este saludo, el servidor nos entregará una lista de los comandos de ESMTP que soporta.

image

Nota: algunos sistemas verifican que nosotros seamos realmente quienes decimos ser realizando consultas de DNS-Reverso o verificando nuestra IP en una Lista Negra, pero esos temas los veremos pronto, en los artículos de Antispam que pronto publicaré 😉 

2. Ingresamos el nombre de usuario y contraseña. usando el comando AUTH LOGIN, decimos al servidor que vamos a autenticarnos usando login y password, por lo que el servidor nos responde con un amistoso: 334 VXNlcm5hbWU6  QUË?

ESMTP usa como método de codificación Base64, por lo que, salvo que seas un balazo (de)codificando en Base64, es indispensable que tengas un codificador/decodificador de Base64 a mano ;).
Luego de una búsqueda por “Base64 Decoder”, nuestro buscador favorito debiese darnos al menos una respuesta, por ejemplo yo usé éste decodificador.

Ahora si …

334 es un código para indicarnos: OK, esperando Datos, y VXNlcm5hbWU6 , que es la codificación para “Username:“-. 

Usando el Codificador transformamos nuestro nombre de usuario a Base64, y lo pegamos en la línea de comandos. Si nuestro login name fuese, por ejemplo: nombre.apellido, al servidor hay que ingresarle: bm9tYnJlLmFwZWxsaWRv.

La respuesta del servidor ahora es:  334 UGFzc3dvcmQ6.
334, al menos ahora ya sabemos lo que significa ;), y nuestro decodificador de base64 nos dice que “UGFzc3dvcmQ6” es la codificación para “Password:”.
Necesitamos, entonces, codificar nuestro password y pegarlo para enviárselo al servidor. Si nuestro password fuese, por ejemplo: P@assw0rd, la codificación sería: UEBhc3N3MHJk.

image

Finalmente, si ingresamos bien la contraseña, el servidor nos entrega un mensaje de autentificación exitosa: 235 2.7.0 Authentication successful. (mmm….esta vez sin codificar? … cómo?, y justo cuando ya nos estábamos acostumbrando al Base64… 😉

En este momento, ya estamos autenticados en el servidor, por lo que en adelante el proceso de envío de mail es el ya conocido.

3. Indicamos el remitente y destinatario(s): MAIL FROM: y RCPT TO.
Lo importante es que ahora, dependiendo de la configuración del servidor, podríamos enviar correos sin importar que el remitente y/o destinatario pertenecieran al dominio SMTP del servidor. En nuestro ejemplo, el dominio smtp del servidor es @dominio.org, pero como remitente se usó una dirección @gmail.com, y como destinatarios direcciones @gmail.com y @hotmail.com

image

4. Enviamos el Cuerpo del Mensaje. Usamos el comando DATA. Dentro del cuerpo del mensaje es muy recomendable incluir un nombre de destinatario (Esto le indica al servidor que comenzaremos a enviar el cuerpo del correo (“la Data”).

El Servidor nos responde que podemos comenzar a enviar los datos, y que debemos presionar la secuencia Enter -> . -> Enter para indicarle que hemos terminado con el cuerpo del mensaje (Enter, luego un punto y Enter nuevamente).

En el cuerpo del mensaje se incluye una línea con el comando From: (Usuario Gonzalez), y otra con el comando subject: (mail de prueba). Estas líneas son importantes pues la gran mayoría de los servidores de correo bloquean los mensajes sin “asunto”, o sin nombre de remitente por considerarlos SPAM.

image

Update: Los servidores de Correo Exchange 2007 exigen que el remitente sea una dirección de correo válida: usuario@dominio.org.

Luego, el Servidor nos responderá que el mensaje fue recibido correctamente, indicándonos el identificador interno que le dio al correo.

5. Cerrar la Conexión. Finalmente, debemos cerrar la sesión en el servidor con el comando QUIT. (como lo muestra la imagen anterior) 

En este segundo artículo de la serie, vimos como enviar un correo electrónico autentificándonos en el servidor con nuestro nombre de usuario y contraseña usando el protocolo ESMTP.

Gonzalo

Etiquetas de Technorati: ,,

3 comentarios en “Cómo enviar Correo Electrónico a mano, Parte II: SMTP Autenticado”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *