7. El Procesamiento de los mensajes

Los mensajes de correo electr�nico tienen principalmente dos tipos de procesamiento:

Estas "rutas" de env�o de mensaje se suelen denominar "mailers" y son implementadas por "delivery agents".

7.1. Env�os locales

Sendmail normalmente determina si un mensajes es local cuando la direcci�n de destino contiene s�lo un nombre de usuario (por ejemplo, "diego".) Asimismo, cuando la direcci�n de destino contiene un host que coincide con el "hostname" del servidor. Por ejemplo, en la direcci�n "[email protected]" el host especificado (lo que sigue a la @) es "correo.caligula.net"; si este coincide con el hostname del computador, entonces el mensaje debe ser considerado local.

Una excepci�n (extremadamente com�n) a lo �ltimo consiste en forzar que ciertas direcciones sean tratadas como locales. Para esto, el usuario generalmente configurar� el archivo /etc/mail/local-host-names con los nombres de host considerados "locales" o "sin�nimos" del host local. Por ejemplo, para que el mensaje con destino "[email protected]" sea tambi�n considerado local, habr�a que incluir en el archivo /etc/mail/local-host-names:

neron.org
Esto es muy importante, puesto que t�picamente las organizaciones deciden utilizar una direcci�n de email terminada en "@dominio", donde "dominio" casi nunca coincide exactamente con el hostname del servidor. De no configurarse el archivo local-host-names, todos los mensajes que lleguen al servidor con esta direcci�n ser�an considerados no locales, y por tanto ser�an rechazados.

En otros sistemas el nombre del archivo de configuraci�n local-host-names puede variar. Para averiguar o verificar esto, debemos consultar la documentaci�n o en �ltimo caso el archivo "cf":

# grep "^Fw" /etc/mail/sendmail.cf
Fw/etc/mail/local-host-names
En versiones anteriores de Sendmail, este archivo se denominaba /etc/sendmail.cw.

Si se dispone del archivo "M4" que dio origen al "cf", deber�amos buscar all� una l�nea tal como:

FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl
En algunos casos (no en RedHat), esta funcionalidad puede no estar definida y se debe activar.

Sin embargo, esta configuraci�n tambi�n puede hacerse en el mismo archivo "cf" con el comando "class-macro-w" (clase w.) Por ejemplo, las siguientes l�neas muestran que las direcciones terminadas en "@localhost" y "@localhost.localdomain" tambi�n son consideradas locales.

# grep "^Cw" /etc/mail/sendmail.cf
Cwlocalhost.localdomain
Cwlocalhost
En otras palabras, la "clase w" se puede considerar un "array" que contiene los nombres de las direcciones consideradas "locales". Esta clase se puede configurar en el archivo "cf" mediante el comando "C" (seguido por el nombre de la clase, o sea "Cw") o mediante un archivo externo (definido por el comando "F", en nuestro caso "Fw".)

Los env�os locales conllevan a que los mensajes sean almacenados en la "casilla de correo" del usuario destinatario. El usuario deber� extraer estos mensajes con su programa "cliente", posiblemente mediante los protocolos IMAP o POP como se ver� despu�s.

La casilla de correo (inbox) es simplemente un archivo cuyo nombre coincide con el del usuario y se ubica en el directorio /var/spool/mail (como siempre, esto puede variar en otros Unix.) Como veremos, Sendmail no escribe directamente en este archivo y por tanto no es parte de su configuraci�n.

7.2. Definici�n del env�o local

Como se indic�, el env�o local conlleva a que el mensaje sea guardado en el archivo "inbox" o "casilla de correo". Sin embargo, Sendmail no realiza directamente este trabajo, sino que invoca a un programa auxiliar para esta tarea (aparentemente sencilla.)

Esto se configura en el archivo "cf" con la definici�n "Mlocal" (mailer local.) En el archivo "cf" de RedHat 8.0, esta secci�n luce as�:

Mlocal,		P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9,
		S=EnvFromL/HdrFromL,
		R=EnvToL/HdrToL,
		T=DNS/RFC822/X-Unix,
		A=procmail -t -Y -a $h -d $u
Las l�neas que se inician con espacios o tabuladores se consideran la continuaci�n de la anterior, por tanto, el extracto mostrado arriba debe considerarse una sola l�nea.

Como se aprecia, Sendmail utiliza un programa auxliar llamado /usr/bin/procmail para el delivery local. En muchos sistemas Unix el programa usado es /bin/mail. No profundizaremos m�s sobre esto por ahora, pero en general "procmail" es mucho m�s flexible y eficiente que las alternativas tradicionales.

7.3. Env�os Remotos

Sendmail tiene la capacidad de hacer env�os remotos usando el protocolo SMTP (que opera usando TCP/IP.) En este caso, Sendmail no emplea un programa auxiliar como en los env�os locales.

Cuando un mensaje no puede ser enviado a uno de los destinatarios, el mensaje es "encolado" para un posterior reintento.

Para efectuar el env�o remoto, Sendmail requiere que los destinatarios del mensaje posean una "parte de host" distinta al hostname local (o a sus sin�nimos de la clase-w, como se vio en la secci�n anterior.)

Sendmail normalmente utilizar� el DNS a fin de encontrar el servidor remoto que recibir� el mensaje (espec�ficamente, el registro MX y el registro A) y abrir� una conexi�n SMTP.

El archivo "cf" define este env�o con una l�nea como la que sigue.

Msmtp,	P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP,
	E=\r\n, L=990,
	T=DNS/RFC822/SMTP,
	A=TCP $h

De estos ejemplos se puede apreciar que las definiciones de los "mailers" o "agentes de delivery" siempre empiezan con el comando "M", inmediatamente seguido por el nombre del "mailer".

7.4. "mailers" en M4

Los mailers en el archivo M4 deben aparecer al final del archivo fuente M4. Para generar los dos mailers mencionados arriba, simplemente se requiere:

MAILER(smtp)dnl
MAILER(procmail)dnl
Esto lo puede observar el lector en el archivo "sendmail.mc" proporcionado por RedHat.