7.2 El SMTP (Simple Mail Transfer Protocol)

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.

7.2.1 Peticiones y respuestas

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í:

  1. 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).
  2. 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.

7.2.2 Los verbos

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.

7.2.3 Códigos

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.