SMTP es el protocolo estándar para transferir correo entre computadores en el conjunto de protocolos TCP/IP, está definido en el RFC 821. El protocolo SMTP se utiliza para transferir un mensage desde un emisor SMTP a un receptor SMTP a través de una conexión TCP. Podemos decir que es un sistema seguro pero no garantiza la recuperación de mensajes perdidos.
Aunque los mensajes transferidos por SMTP normalmente siguen el formato definido en el RPC 822 SMTP no está involucrado ni con el formato ni con el contenido de los mensajes transferidos a excepción de cuando SMTP normaliza el conjunto de caracteres del mensaje al conjunto ASCII de 7 bits y cuando SMTP incorpora información al inicio del mensaje transferido para indicar el camino seguido por el mensaje.
En la siguiente figura podemos observar el funcionamiento básico del correo electrónico tanto para el correo entrante como el saliente.
Figura: Flujo de correo POP3 y SMTP
El correo lo crea una aplicación agente de usuario al que le añade una cabecera. Esta cabecera consta de la dirección del destinatario del correo y más campos con diferentes opciones. A continuación viene el cuerpo del correo, es decir, el mensaje en sí. Estos mensajes se ponen en una cola de espera hasta que se pasan al programa Emisor SMTP. Cada mensaje que se encuentra en esta cola consta de dos partes:
Texto del mensaje: Constituido por la cabecera (RFC 822) y por el cuerpo del mensaje.
Destinos: Lista de destinos de correo.
La lista de destinos de correo del mensaje la obtiene el agente usuario de la cabecera RPC 822. En algunos casos es posible que el agente del usuario tenga que ampliar esta lista, eliminar algún duplicado o reemplazar nombres por verdaderas direcciones de correo electrónico. De esta forma, a pesar de la interficie de correo que tengamos, la lista de envio que llegará a SMTP será la misma independientemente de la aplicación de correo que tengamos.
El programa de envio de SMTP toma de esta cola normalizada los mensajes para enviarlo a la máquina de destino adecuado a partir de transsacciones SMTP usando una o varias conexiones TCP a partir del puerto 25. Si una máquina envia mucho correo es posible que tenga varios programas SMTP de envio, al igual que si recibe mucho tendrá que crear receptores de SMTP según la demanda de cada momento. De esta forma se evitan retardos en el correo.
Una vez que el emisor de SMTP ha enviado un correo a todos los destinatarios indicados, éste es borrado de la cola de correos de salida. No obstante SMTP tiene técnicas de optimización para el envio de correo, ya que si un correo va dirigido a varios destinatarios pero a la misma máquina, el texto no se envía N veces sino una sola.
El emisor de SMTP también prevé varios errores bastante usuales. Puede darse el caso que la máquina de destino en ese momento no está disponible o que falle la conexión TCP. En este caso el correo se vuelve a poner en la cola de salida. No obstante puede darse el caso que la máquina de destino no exista. Para preveer este fallo, si un correo no se ha podido enviar después de varias ocasiones no se vuelve a poner en la cola de salida ya que en caso contrario nunca saldría de la cola.
El receptor de SMTP acepta cada mensaje que llega y lo sitúa en el buzón de correo del usuario adecuado o lo copia en la cola local de correo de salida para reenviarlo si es lo que se solicita. El receptor ha de ser capaz de verificar los destinos locales del correo y tratar los errores, incluyendo los errores de transmisión y la falta de capacidad de disco.
El emisor de SMTP solo es responsable del mensaje hasta que llega al receptor de SMTP, no obstante esto no quiere decir que haya sido entregado.
Normalmete el mensaje va de la máquina de origen a la de destino en una única conexión TCP, pero puede darse el caso que pase por otras máquinas y por consiguiente tenga que atravesar varias conexiones TCP.
Cabe destacar que el protocolo SMTP sólo se limita a controlar el envio del mesage del emisor SMTP al receptor. Las demás funciones de verificación que veiamos en la anterior figura están fuera del SMTP y varian dependiendo del sintema.
El funcionamiento de SMTP se hace a través de un conjunto de mensajes intercambiados entre el emisor y el receptor de SMTP. La iniciativa la lleva el emisor que también se encarga de establecer la conexión TCP. Una vez establecida la conexión TCP, el emisor envia las órdenes al receptor a través de dicha conexión. Cada orden genera exactamente una respuesta del receptor SMTP.
Las respuestas del receptor pueden ser de 4 tipos:
Respuesta de finalización afirmativa: tiene lugar cuando todo ha ido bien y se puede iniciar una nueva solicitud.
Respuesta intermedia positiva: indica que la orden del emisor ha sido aceptada pero que la acción que se ha solicitado aun no se ha realizado ya que está a la espera de recibir más información.
Respuesta de finalización negativa transitoria: esta respuesta tiene lugar cuando la orden no se aceptó y la acción que se ha solicitado no se ha realizado. No obstante, cabe la posibilidad de que se acepte si se vuelve a enviar.
Respuesta de finalización negativa permanente: la orden no se ha aceptado ni tampoco se ha realizado.
El funcionamiento básico del protocolo SMTP consta de 3 fases: establecimiento de la conexión, intercambio de uno o varios pares orden/respuesta y por último el cierre de la connexión.
Un emisor SMTP intentará establecer una conexión TCP con un computador destino cuando tiene uno o más mensajes de correo para entregar a ese computador siguiendo los siguientes pasos:
1º El emisor (parte activa) abre una conexión TCP con el receptor.
2º Una vez establecida la conexión, el receptor se identifica a sí mismo con la orden "220 Service Ready" que indica que el servicio está preparado.
3º Después el emisor es el que se identifica a sí mismo con la orden "HELO".
4º Por último el receptor acepta la identificación del emisor con la orden "250 OK" que indica que la acción de correo solicitada es correcta.
En estos momentos la conexión ya se ha establecido, el emisor SMTP puede enviar uno o más mensajes al receptor SMTP. Para enviar mensajes se sigue el siguiente protocolo:
1º Una orden "MAIL" identifica al que originó el mensaje. Esta orden da el camino inverso que puede utilizarse para informar de errores.
2º Una o más órdenes RCPT identifican los destinos de este mensaje. La orden RCPT identifica un destino individual de los datos del correo. Usando esta orden se pueden usar destinos múltiples.
3º Una orden DATA transfiere el texto del mensaje.
La ventaja del RCPT es que el emisor no enviará el mensaje hasta que esté seguro que el receptor está preocupado para recibir el mensaje para al menos un destino evitando el tiempo suplementario de enviar un mensaje entero para aprender que el destino es desconocido.
El emisor SMTP cierra la conexión en dos pasos:
1º El emisor envía una orden "QUIT" y espera una respuesta.
2º Se inicia la operación de cierre TCP para la conexión TCP. El receptor inicia su cierre TCP después de enviar su respuesta en la orden "QUIT".