El Protocolo simple de transferencia de correo (inglés: Simple Mail Transfer Protocol, SMTP) es un protocolo de red utilizado para el intercambio de mensajes de correo electrónico entre ordenadores u otros dispositivos (PDA, teléfonos móviles, impresoras, etc.). Se encuentra en la capa de aplicación del modelo OSI, la última de este modelo, en la que se dispone la interfaz entre las aplicaciones de comunicación y la red que transmite los mensajes. Fue definido inicialmente en agosto de 1982 por la RFC 821 (para la transferencia) y la RFC 822 (para el mensaje), dos estándares oficiales de Internet que fueron reemplazados respectivamente por la RFC 2821 y la RFC 2822, posteriormente destituidos por los actuales estándares de las RFC 5321 y RFC 5322.Internet Official Protocol Standards.
El funcionamiento de este protocolo se da en línea, de manera que opera en los servicios de correo electrónico. Sin embargo, posee algunas limitaciones en cuanto a la recepción de mensajes en el servidor de destino (cola de mensajes recibidos), por lo que se ejecuta normalmente en relación con otros, como POP3 o IMAP, otorgando a SMTP la tarea específica de enviar correos y delegando la de recibirlos a los protocolos antes mencionados.
Historia
En 1982 Jon Postel publicó y liberó (empezó a diseñarlo en 1980) el primer sistema basado en SMTP para intercambiar correos electrónicos para usarse en ARPANET, definido en las request for comments RFC 821 y RFC 822. La primera de ellas define este protocolo y la segunda la forma del mensaje que este protocolo debía transportar.
La estructura de SMTP se basa en el modelo cliente-servidor, donde un cliente envía un mensaje a uno o varios servidores para recibir una respuesta. La comunicación entre el cliente y el servidor consiste enteramente en líneas de texto compuestas por caracteres Unicode, aunque originalmente estaba limitado a caracteres ASCII. El tamaño máximo permitido para estas líneas es de 1000 caracteres.
Las respuestas del servidor constan de un código numérico de tres dígitos, seguido de un texto explicativo. El número tiene como propósito servir para el procesamiento automático de la respuesta, mientras que el texto permite que una persona interprete la respuesta.
En el protocolo SMTP todos los comandos, respuestas o datos son líneas de texto, son delimitadas por el par de caracteres CRLF. Todas las respuestas tienen un código numérico al comienzo de la línea central.
Modelo de procesamiento de correo 400px|thumb|Modelo de procesamiento del correo electrónico con SMTP (en inglés).
El correo electrónico es presentado por un cliente de correo (MUA, Mail User Agent, "agente usuario de correo") a un servidor de correo (MSA, Mail Submission Agent, "agente de envío de correo") usando SMTP a través del puerto 587. Sin embargo, una gran parte de los proveedores de correo todavía permite el envío a través del puerto 25. Desde allí, el MSA entrega el correo a su agente de transferencia postal mejor conocido como el MTA (Mail Transfer Agent, "agente de transferencia de correo"). En algunas ocasiones, estos dos agentes son diferentes, aunque hay que destacar que provienen del mismo software de donde fueron lanzados, sólo que presentan opciones diferentes dentro de la misma máquina.
El procesamiento local que se presenta puede ser realizado en una sola máquina o partido entre varias aplicaciones; en este segundo caso, los procesos implicados pueden compartir archivos; aquí SMTP es usado para la transferencia de mensajes internamente, con cada uno de los hosts configurados para usar la siguiente aplicación como un servidor elegante. Para lograr la localización del servidor objetivo, el MTA tiene que usar el sistema de nombre de dominio (DNS) para lograr la búsqueda del registro interno de intercambio de correo conocido como registro MX para el dominio del destinatario (la parte de la dirección a la derecha de la arroba). Es en ese instante cuando el registro de tipo MX devuelto contiene el nombre del servidor objetivo.
Luego el MTA se conecta al servidor de intercambio como un cliente SMTP. Una vez que el MX acepta el mensaje entrante, este a su vez se lo da a un agente de entrega de correo (MDA) para luego efectuar entrega de correo local. El MDA, además de entregar mensajes, es también capaz de guardar mensajes en un buzón de formato, y la recepción de correo puede ser realizada usando muchos ordenadores. Hay dos formas en que un MDA puede entregar mensajes: ya sea enviándolos directamente al almacenamiento, o bien enviarlos a través de una red usando SMTP. Una vez entregado al servidor de correo local, dicho correo es almacenado para ser descargado. Su recuperación se logra por medio de las aplicaciones de usuario final, conocidas como clientes de correo electrónico, usando el Protocolo de Acceso de Mensaje de Internet (IMAP) o el Protocolo de oficina postal (POP); estos protocolos facilitan tanto el acceso como el manejo de correo almacenado.
Puertos
Los administradores de servidor pueden elegir si los clientes utilizan el puerto 25 (SMTP) o el puerto 587 (envío de correo) con el protocolo TCP para retransmitir el correo saliente a otro servidor de correo.Ver RFC 6409. Las especificaciones y muchos servidores admiten ambos. Aunque algunos servidores soportan el puerto 465 para SMTP encriptado (en infracción de las especificaciones), es preferible utilizar los puertos estándar y comandos SMTP estándar de acuerdo con RFC 3207, si se debe utilizar una sesión segura entre el cliente y el servidor.
Algunos servidores están configurados para rechazar toda la retransmisión en el puerto 25, pero los usuarios válidos autenticados en el puerto 587 pueden retransmitir correo a cualquier dirección válida. Algunos proveedores de servicios de Internet interceptan el puerto 25, redirigiendo el tráfico a su propio servidor SMTP, independientemente de la dirección de destino. Esto significa que no es posible para sus usuarios acceder a un servidor SMTP fuera de la red del ISP a través del puerto 25.
Algunos servidores SMTP admiten el acceso autenticado en otro puerto que no sea 587 o 25 para permitir a los usuarios conectarse a ellos, incluso si el puerto 25 está bloqueado, pero 587 es el puerto estándar y ampliamente apoyada por los usuarios enviar correo nuevo. Microsoft Exchange Server 2013 SMTP puede escuchar en los puertos 25, 587, 465, 475, y 2525, en función de servidor y si los roles se combinan en un solo servidor. Los puertos 25 y 587 se utilizan para proporcionar la conectividad del cliente con el servicio de transporte en la parte delantera de la función de servidor de acceso de cliente (CAS). Los puertos 25, 465 y 475 son utilizados por el servicio de transporte de buzón de correo. Sin embargo, cuando la función de buzón se combina con la función de CAS en un único servidor, el puerto 2525 se utiliza por la función de buzón de SMTP desde el servicio de transporte de extremo delantero del CAS, CAS, mientras que continúa para utilizar el puerto 25. Puerto 465 es utilizado por el servicio de transporte de buzón de correo para recibir las conexiones de cliente proxy de la función CAS. Puerto 475 es utilizado por la función de buzón para comunicarse directamente con otras funciones de buzón, la transferencia de correo entre el servicio de envío de transporte de buzón de correo y el servicio de entrega de transporte buzón..
Descripción del Protocolo
SMTP. Una transacción de SMTP se compone de tres secuencias de comando / respuesta (véase el ejemplo a continuación).
Ellos son: MAIL FROM: comando para establecer la dirección de retorno, también conocido como Return-Path, remitente o sobre. Esta es la dirección para mensajes de despedida. RCPT TO: comando, para establecer un destinatario de este mensaje. Este mandato puede emitirse varias veces, una para cada destinatario. Estas direcciones son también parte de la envolvente. DATA: para enviar el mensaje de texto. Este es el contenido del mensaje, en lugar de su envoltura. Se compone de una cabecera de mensaje y el cuerpo del mensaje separado por una línea en blanco. DATA es en realidad un grupo de comandos, y el servidor responde dos veces: una vez para el comando de datos adecuada, para reconocer que está listo para recibir el texto, y la segunda vez después de la secuencia final de los datos, para aceptar o rechazar todo el mensaje.
Resumen simple del funcionamiento del protocolo SMTP
Cuando un cliente establece una conexión con el servidor SMTP, espera a que este envíe un mensaje “220 Service ready” o “421 Service non available”. Se envía un HELO desde el cliente. Con ello el servidor se identifica. Esto puede usarse para comprobar si se conectó con el servidor SMTP correcto. El cliente comienza la transacción del correo con la orden MAIL FROM. Como argumento de esta orden se puede pasar la dirección de correo al que el servidor notificará cualquier fallo en el envío del correo (Por ejemplo, MAIL FROM:<fuente@host0>). Luego si el servidor comprueba que el origen es válido, el servidor responde “250 OK”. Ya le hemos dicho al servidor que queremos mandar un correo, ahora hay que comunicarle a quien. La orden para esto es RCPT TO:<destino@host>. Se pueden mandar tantas órdenes RCPT como destinatarios del correo queramos. Por cada destinatario, el servidor contestará “250 OK” o bien “550 No such user here”, si no encuentra al destinatario. Una vez enviados todos los RCPT, el cliente envía una orden DATA para indicar que a continuación se envían los contenidos del mensaje. El servidor responde “354 Start mail input, end with <CRLF>.<CRLF>” Esto indica al cliente como ha de notificar el fin del mensaje. Ahora el cliente envía el cuerpo del mensaje, línea a línea. Una vez finalizado, se termina con un <CRLF>.<CRLF> (la última línea será un punto), a lo que el servidor contestará “250 OK”, o un mensaje de error apropiado. Tras el envío, el cliente, si no tiene que enviar más correos, con la orden QUIT corta la conexión. También puede usar la orden TURN, con lo que el cliente pasa a ser el servidor, y el servidor se convierte en cliente. Finalmente, si tiene más mensajes que enviar, repite el proceso hasta completarlos.
Puede que el servidor SMTP soporte las extensiones definidas en el RFC 1651, en este caso, la orden HELO puede ser sustituida por la orden EHLO, con lo que el servidor contestará con una lista de las extensiones admitidas. Si el servidor no soporta las extensiones, contestará con un mensaje "500 Syntax error, command unrecognized".
Comandos HELO, para abrir una sesión con el servidor EHLO, para abrir una sesión, en el caso de que el servidor soporte extensiones definidas en el RFC 1651 MAIL FROM, para indicar quien envía el mensaje RCPT TO, para indicar el destinatario del mensaje DATA, para indicar el comienzo del mensaje, este finalizará cuando haya una línea únicamente con un punto. QUIT, para cerrar la sesión RSET Aborta la transacción en curso y borra todos los registros. SEND Inicia una transacción en la cual el mensaje se entrega a una terminal. SOML El mensaje se entrega a un terminal o a un buzón. SAML El mensaje se entrega a un terminal y a un buzón. VRFY Solicita al servidor la verificación de todo un argumento. EXPN Solicita al servidor la confirmación del argumento. HELP Permite solicitar información sobre un comando. NOOP No decir nada, se emplea para mantener la sesión abierta TURN Solicita al servidor que intercambien los papeles.
De los tres dígitos del código numérico, el primero indica la categoría de la respuesta, estando definidas las siguientes categorías:
2XX, la operación solicitada mediante el comando anterior ha sido concluida con éxito 3XX, la orden ha sido aceptada, pero el servidor está pendiente de que el cliente le envíe nuevos datos para terminar la operación 4XX, para una respuesta de error, pero se espera a que se repita la instrucción