El sistema de transferencia de correos electrónicos utiliza el modelo cliente/servidor y un
protocolo, el SMTP (RFC 821, RFC 1123, RFC 1425, RFC 1651, RFC 1869 y RFC 2821)
para comunicarse.
En una conversación SMTP, un MUA o un mailer (cliente) envía un conjunto
de peticiones (en inglés, requests) a un mailer (servidor) y éste le contesta
con respuestas (responses). A grandes rasgos el proceso petición-respuesta es
así:
- Cuando un cliente se conecta a un servidor, éste envía una respuesta que
indica si acepta la conexión o la rechaza (temporal o permanentemente). Esta
respuesta inicial se conoce como saludo (greeting).
- Si el servidor acepta la conexión, el cliente envía cero o más peticiones al
servidor. En general el cliente no debe enviar una nueva petición al servidor si
la anterior respuesta no ha sido recibida.
El formato de una petición es siempre una cadena ASCII imprimible:
<verb> [<parameter>]\015\012
donde <verb> puede ser:
-
HELO:
- Abreviatura de “hello”. Va seguido de un parámetro que indica al servidor, el
nombre del cliente. Ejemplo:
HELO gogh.ace.ual.es
-
RSET:
- Abreviatura de “reset”. Se utiliza para borrar el sobre que se acaba de enviar
al servidor. Esto generalmente se realiza cuando se van a enviar varios
correos electrónicos desde un mismo cliente a un mismo servidor durante
una única conexión SMTP (que en este caso se llama conexión SMTP
persistente).
-
NOOP:
- Abreviatura de “no operation”. Se utiliza para testear el estado de la conexión sin
enviar información alguna.
-
MAIL:
- Debe ir seguido de la cadena “FROM:” y de la dirección de correo del
remitente.
-
RCPT:
- Abreviatura de “recipient”. Debe ir seguido de la cadena “TO:” y de la dirección
de correo del destinatario. Cuando hay varios destinatarios se envían varios
“RCPT TO:”.
-
DATA:
- No tiene argumentos y se utiliza para indicar al servidor que todas las
líneas que van a continuación forman el cuerpo del mensaje del correo
electrónico. Este cuerpo acaba en una línea que sólo contiene un punto
“.”.
-
QUIT:
- Solicita al servidor el cierre de la conexión.
Véase el RFC correspondiente para conocer el resto de verbos.
El formato de una respuesta es siempre una secuencia de cadenas ASCII imprimibles:
<code> <string>\015\012
donde <code> es un código de error que indica el carácter de la respuesta. Por ejemplo,
el código 250 indica que la petición ha sido aceptada. Véase el RFC correspondiente para
conocer el resto de códigos.