SMTP
SMTP
Resumen En el siguiente artculo hablaremos sobre SMTP y brindaremos una demostracin de cmo se realizara la transferencia de un correo. (SMTP) Protocolo Simple de Transferencia de Correo, Es un protocolo cuyo objetivo es transferir correos de manera confiable y segura. 1. Introduccin Con el pasar del tiempo la comunicacin entre las personas ha cambiado drsticamente para muchos escribir una carta ya no es necesario sino que a travs de una computadora se envan correos electrnicos, estos correos necesitan ser enviados a un servidor atreves del protocolo SMTP. En l se utiliza la arquitectura cliente-servidor donde cada mensaje del cliente genera una respuesta del servidor y para poder lograr esto se debe establecer una conexin en la capa de transporte. 2. Descripcin del Protocolo SMTP es un protocolo sencillo de transferencia de correo, basado en el modelo cliente-servidor, perteneciente a la familia de protocolos TCP/IP, el cual ha estado tradicionalmente limitado a la distribucin de mensajes sencillos de texto. SMTP est definido en el RFC 821 y no est involucrado ni con el formato ni con el contenido del mensaje, con dos excepciones: 1) Normaliza el conjunto de caracteres del mensaje a ASCII de 7 bits. 2) Aade informacin al comienzo del mensaje transferido que indica el camino que ha seguido el mensaje.
+----------+ +----------+ +------+ | | | | | User |<-->| | SMTP | | +------+ | Client- |Commands/Replies| Server- | +------+ | SMTP |<-------------->| SMTP | +------+ | File |<-->| | and Mail | |<-->| File | |System| | | | | |System| +------+ +----------+ +----------+ +------+ SMTP client SMTP server
Cuando un cliente SMTP tiene un mensaje que transmitir, se establece un canal de dos vas de transmisin a un servidor SMTP. La responsabilidad de un cliente SMTP es la transferencia de mensajes de
correo electrnico a uno o ms servidores SMTP, o un informe de su fracaso al hacerlo. Un servidor SMTP puede ser el destino final o una intermedio "de relevo" (es decir, que puede asumir el papel de un servidor SMTP cliente despus de recibir el mensaje) o "gateway" (es decir, se puede transportar el mensaje con algn otro protocolo de SMTP). Comandos SMTP son generados por el cliente SMTP y Respuestas SMTP se envan desde el servidor SMTP para el cliente SMTP en respuesta a los comandos. En otras palabras, la transferencia de mensajes puede ocurrir en una sola conexin entre el original SMTP remitente y el destinatario final de SMTP, o puede ocurrir en una serie de saltos a travs de sistemas intermedios. En cualquiera de los casos, un rechazo formal de la responsabilidad del mensaje ocurre: el protocolo requiere que el servidor acepte la responsabilidad, ya sea para la entrega de un mensaje o bien informar al no hacerlo. Cuando el mismo mensaje se enva a varios destinatarios, este protocolo alienta la transmisin de una sola copia de los datos de todos destinatarios al mismo destino (o intermedio) anfitrin. El servidor responde a cada comando con una respuesta; las respuestas pueden indicar que el comando fue aceptado, que se esperan comandos adicionales, o que una condicin de error temporal o permanente que existe. Una vez que un mensaje de correo electrnico dado ha sido transmitido, el cliente puede solicitar que la conexin se cerrar o iniciar otras transacciones. Adems, un cliente SMTP puede utilizar una conexin a un Servidor SMTP para los servicios auxiliares tales como la verificacin de correo electrnico direcciones o la recuperacin de las direcciones de correo la lista de suscriptores. Como se sugiri anteriormente, este protocolo proporciona mecanismos para la transmisin de correo. Esta transmisin se produce normalmente directamente desde el host del usuario que enva al host del usuario que recibe cuando las dos mquinas estn conectadas al mismo servicio de transporte. Cuando no se est conectado al mismo servicio de transporte, la transmisin ocurre a travs de uno o ms servidores de retransmisin SMTP. Un host intermedio que acta tanto como un servidor de retransmisin SMTP o bien un gateway dentro de alguna otra transmisin, generalmente se selecciona a travs del uso del registro de intercambio de correo del servicio de nombres de dominio (DNS MX). El funcionamiento de SMTP se realiza por medio de rdenes y respuestas intercambiadas entre el servidor y el receptor SMTP. La iniciativa la lleva el SMTP cliente, quien establece la conexin TCP. Una vez que se establece la conexin, el cliente SMTP enva rdenes a travs de la conexin al servidor SMTP. Cada orden genera exactamente una respuesta del servidor SMTP. En el protocolo SMTP todas las rdenes, rplicas o datos son lneas de texto, delimitadas por el carcter <CRLF>
Las rdenes SMTP constan de una lnea de texto comenzando con un cdigo de orden de 4 letras, seguido en algunos casos por un campo de argumentos. Estas son: HELO: para abrir una sesin con el servidor MAIL FROM: para indicar quien enva el mensaje RCPT TO: para indicar el destinatario del mensaje DATA: para indicar el comienzo del mensaje, ste finalizar cuando haya una lnea nicamente con un punto. QUIT: para cerrar la sesin RSET: Aborta la transaccin en curso y borra todos los registros. SEND: Inicia una transaccin en la cual el mensaje se entrega a una terminal. SOML: El mensaje se entrega a un terminal o a un buzn. SAML: El mensaje se entrega a un terminal y a un buzn. VRFY: Solicita al servidor la verificacin del argumento. EXPN: Solicita al servidor la confirmacin del argumento. HELP: Permite solicitar informacin sobre un comando. NOOP: Se emplea para reiniciar los temporizadores. TURN: Solicita al servidor que intercambien los papeles. Las respuestas SMTP comienzan con un cdigo de 3 dgitos y puede ir seguido por informacin adicional. El primer bit indica la categora de la respuesta: 2XX: la operacin solicitada mediante el comando anterior ha sido concluida con xito. 3XX: la orden ha sido aceptada, pero el servidor esta pendiente de que el cliente le enve nuevos datos para terminar la operacin. 4XX: para una respuesta de error, pero se espera a que se repita la instruccin. 5XX: para indicar una condicin de error permanente, por lo que no debe repetirse la orden. Una vez que el servidor recibe el mensaje finalizado con un punto puede almacenarlo si es para un destinatario que pertenece a su dominio, o bien retransmitirlo a otro servidor para que finalmente llegue a un servidor del dominio del receptor. En el conjunto de protocolos TCP/IP, el SMTP va por encima del TCP, usando normalmente el puerto 25 en el servidor para establecer la conexin. 3. Demo Para realizar la demostracin de dicho protocolo usaremos un sistema operativo basado en el kernel de Linux y un cliente SMTP llamado MSMTP. Para la instalacin de dicho cliente abriremos la terminal (consola) e introduciremos el siguiente comando como superusuario: > aptitude install msmtp Una vez instalado el cliente procederemos a realizar la
configuracin del mismo, para ello crearemos dos archivos llamados ~.msmtprc y msmtprc. Para saber dnde se debe crear ambos archivos introduciremos el siguiente comando: > msmtp -version Del resultado que nos arroga solo nos interesan las lineas System configuration file name y User configuration file name que para nuestro caso nos da estas direcciones respectivamente: /etc/msmtprc y /home/<tu_usuario>/.msmtprc. Ambos archivos tendran la misma informacin para efectos de nuestra demostracin, a continuacin se detalla. # Configuracin de todas las cuentas defaults auth on tls on tls_trust_file /usr/share/cacertificates/mozilla/Equifax_Secure_CA.crt # Una Cuenta de correo Gmail account gmail hostsmtp.gmail.com port 587 from [email protected] user [email protected] password smtpredesredes # Seleccionamos la cuenta gmail por defecto. account default: gmail Luego de haber creado y configurado ambos archivos abrimos una terminal en el directorio /home/<tu_usuario>, para poder enviar un correo con la configuracin que se acaba de crear, si no lo haces desde ese directorio puede darte un error, ya que no encuentra el archivo de configuracin antes creado. Ya en el directorio antes mencionado crearemos un archivo llamado correo con la siguiente informacin: To: [email protected] From: [email protected] Subject: Verificando que funciona! Estamos enviado un correo por consola! :) Teniendo esto, ya casi enviamos un correo por consola, solo falta el comando para enviarlo, el cual veremos a continuacin: >cat <archivo_creado> | msmtp -a <cuenta_configurada>
<receptor(es)> Para nuestra demostracin sera: >cat correo | msmtp -a gmail [email protected] Hay un punto que aclarar, el correo se enviara solo a los receptores que ponga en la terminal, ya que en el archivo el parametro 'To:' eso solo la cabecera del correo y no los receptores reales. 4. Conclusin En el artculo pudimos observar el comportamiento del protocolo SMTP para el envo de correos de un cliente a un servidor, hablamos de los tipos de mensajes que son enviados para llevar a cabo esta transaccin y realizamos la configuracin de un cliente SMTP para realizar l envi de un correo a un servidor ya configurado como lo es el de gmail. Para futuras investigaciones o pruebas sera interesante realizar la configuracin del servidor y poder configurar otros protocolos para el manejo de los correos enviados y recibidos. 5. Referencias Stallings, William, "Comunicaciones y Redes de Computadoras", 6 edicin, Editorial Prentice - Hall, Madrid, 2003. Msmtp, https://wiki.archlinux.org/index.php/Msmtp The Quick-N-Dirty Guide to Using mutt with gmail, http://www.scottro.net/qnd/qnd-gmail.html Mutt, http://www.esdebian.org/wiki/mutt How to Configure MSMTP to use Gmail from Linux and PHP, http://benosullivan.co.uk/internet/how-to-configure-msmtp-to-usegmail-from-linux-and-php/ Simple Mail Transfer Protocol, http://es.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol RFC 821