Cola de correo bajo Linux mini-COMO

Leif Erlingsson, leif@lege.com, Jan P Tietze, jptietze@mail.hh.provi.de. Traducción: David Marín Carreño davefx@bigfoot.com.

v2.02, 3 de Septiembre de 1997, sendmail 8.8.7. Traducción: 23 de Febrero de 1998
Poner en la cola el correo remoto + Enviar el correo local Los cambios de configuración necesarios para hacer que Sendmail envíe el correo local inmediatamente y ponga el correo remoto en la cola de mensajes hasta que se envíen.

1. Introducción

Este documento está realizado por dos autores. La parte de soluciones en las que no es necesario solicitar la conexión (la parte más antigua) es obra de Leif Erlingsson <leif@lege.com>, y la parte nueva de soluciones de conexión bajo petición es obra de Jan P Tietze <jptietze@mail.hh.provi.de>.

2. PARTE de soluciones en las que no es necesario solicitar la conexión (soluciones NO dial-on-demand)

Escrito por Leif Erlingsson <leif@lege.com>.

La versión original de esta parte contenía muchas cosas innecesarias. Esto es todo lo que sirve, en realidad...

2.1 Arrancando sendmail

Slackware y compatibles: /etc/rc.d/rc.M:

echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -os) [queue only mode]..."
/usr/sbin/sendmail -bd -os      # NOT "-bd -q 15m", the "standard" flags!

RedHat y compatibles: /etc/rc.d/init.d/sendmail.init:

echo -n "Starting sendmail: [queue only mode]"
daemon sendmail -bd -os         # NOT daemon sendmail -bd -q1h

La opción -os no es realmente esencial, todo lo que hace es esto:

SuperSafe [s] Ser super-seguro al ejecutar cosas, como
        por ejemplo, instanciar siempre  el fichero de
        cola,  incluso  si  va  a  intentar  un  envío
        inmediato.   Sendmail   siempre  instancia  el 
        fichero  de cola antes de devolver  el control 
        al cliente bajo  cualquier circunstancia. Esta
        opción debería estar siempre establecida. 

De todos modos, esta opción debería estar configurada en el fichero de configuración por defecto sendmail.cf.

2.2 Configurando sendmail

Los usuarios serios utilizan el código m4 para hacer esto. Yo recomiendo esta solución si alguna vez planea actualizar sendmail y también para cuando realice un cambio no trivial a sendmail.cf.

Si usted no desea configurar sendmail de manera que las cabeceras de respuesta trabajen aunque usted posea una conexión con IP dinámica, entonces no necesitará el código m4.

Configurando sendmail.cf directamente, para configuraciones triviales.

Esta manera de hacer las cosas depende extremadamente de la versión de sendmail que esté utilizando. La solución que se cuenta *sólo* es válida para sendmail-8.8.x.

Edite /etc/sendmail.cf:

# avoid connecting to "expensive" mailers on initial submission?
O HoldExpensive=True

... Más abajo ...

#####  @(#)smtp.m4      8.33 (Berkeley) 7/9/96  #####

Msmtp,          P=[IPC], F=mDFMuXe, S=11/31, R=21, E=\r\n, L=990,
                T=DNS/RFC822/SMTP,
                A=IPC $h
Mesmtp,         P=[IPC], F=mDFMuXae, S=11/31, R=21, E=\r\n, L=990,
                T=DNS/RFC822/SMTP,
                A=IPC $h
Msmtp8,         P=[IPC], F=mDFMuX8e, S=11/31, R=21, E=\r\n, L=990,
                T=DNS/RFC822/SMTP,
                A=IPC $h
Mrelay,         P=[IPC], F=mDFMuXa8e, S=11/31, R=61, E=\r\n, L=2040,
                T=DNS/RFC822/SMTP,
                A=IPC $h

La opción importante de aquí es "e". No toque nada si las otras opciones son diferentes en su fichero. Mantenga sus opciones tal y como están. Sólo añada "e" a sus banderas de acuerdo con los ejemplos anteriores, a menos que ya estuviera ahí. Las "e" marcan a las máquinas de correo como "caras" (expensive).

Configurando sendmail.cf utilizando el código m4

En esta sección asumiré, por simplicidad, que la versión sendmail es la 8.8.7. Si tiene una versión diferente, reemplace 8.8.7 por el número de versión que posea. Además, las instrucciones no funcionarán con versiones antiguas de sendmail. Consiga la última versión.

Descargue el código de sendmail. Utilice ``http://WWW.Sendmail.ORG'' o quizá ``ftp.sendmail.org''.

También le recomiendo que consiga mi parche para permitir hacer alias inverso del sobre del remitente y otras muchas opciones que le permiten tomar el control de su entorno de correo.

Escriba a ``Sendmail Patch <sendmail@lege.com>'', Poniendo como asunto del mensaje: ``sendmail-8.8.7'', si 8.8.7 es su versión de sendmail.

También está disponible de ``http://www.lege.com''.

No tiene que descargar mis parches para conseguir que "Poner en la cola el correo remoto + Enviar el correo local" funcione. Mis parches resuelven otras cosas. Pero creo que este es un buen lugar para mencionarlos, ya que muchos usuarios de Linux los encontrarán extremadamente útiles. (Este parche puede incluso conseguir dominios virtuales que funcionen correctamente, si así lo desea. Los dominios virtuales no tienen por qué ser "locales". Puede hacer que tenga "alias x", o en otras palabras "alias inversos").

Descomprima el código de sendmail. Puede tener /usr/src/sendmail-8.8.7/. cd /usr/src/sendmail-8.8.7/cf

Ahora ejecute mi parche si lo desea. Si no, salte este paso: Si no desea utilizar procmail como Agente Local de Reparto, guarde su /usr/src/sendmail-8.8.7/cf/ostype/linux.m4 antes de hacer esto... Guarde mi parche en "/tmp/sendmail-8.8.7-cf-cpio-idcmu.gz", y...

cd /usr/src/sendmail-8.8.7/cf
gzip -dc < /tmp/sendmail-8.8.7-cf-cpio-idcmu.gz | cpio -idcmu
Si no desea utilizar procmail, escriba de nuevo la copia almacenada de /usr/src/sendmail-8.8.7/cf/ostype/linux.m4.

Y tanto como si ha aplicado mi parche como si no, debe asegurarse de añadir estas líneas o unas líneas muy similares a /usr/src/sendmail-8.8.7/cf/cf/nombredesumaquina.smtp.mc (pero si aplicó mi parche puede desear investigar los ficheros que contengan la palabra "elijah", bajo /usr/src/sendmail-8.8.7/cf):

dnl # Defer Delivery to "expensive" mailers until next time the
dnl # queue is processed using "O HoldExpensive=True" and make
dnl # sure smtp mailers are "expensive".
dnl # (See original "sendmail" book Chapter 30: Options,
dnl # "Oc - Don't connect to expensive mailers", or
dnl # 2nd Edition "sendmail" book Chapter 34.8.29,
dnl # "HoldExpensive (c), Queue for expensive mailers".)
dnl #                           / Leif Erlingsson <leif@lege.com>
define(`confCON_EXPENSIVE', `True')
define(SMTP_MAILER_FLAGS, e)
MAILER(local)dnl
MAILER(smtp)dnl

2.3 Sugerencias de soporte de menú

Las versiones 1.x de este documento contenían sugerencias de soporte de menú para /var/X11R6/lib/fvwm/system.fvwmrc. Las he eliminado en esta versión, pero aún están disponibles bajo petición:

Escriba a ``Menu support suggestions <fvwmrc@lege.com>'', Asunto: ``Menu support suggestions''

3. Parte de soluciones de conexión bajo petición (Dial-on-demand)

Por Jan P Tietze <jptietze@mail.hh.provi.de>.

Muchos usuarios Linux acceden a Internet a través de una línea telefónica y muchos han decidido implementar programas de conexión bajo petición en su sistema. Eso es, cuando un paquete IP de algún tipo tiene que dejar la red local o la máquina local, la conexión a un Proovedor de Servicios de Internet (ISP) se establecerá automáticamente. El enlace se cortará después de un período de tiempo en el que no se intercambien paquetes.

Aunque esta es una manera muy cómoda y sin apenas costes, hay un caso especial en el que ni es cómodo (debido a que el tiempo que se tarda en establecer una conexión vía módem tradicional es bastante grande), ni rentable. Este caso es el envío de correo electrónico. El correo electrónico suele enviarse vía SMTP, tanto como si tiene que ser enviado por su propio sistema o a través de una máquina SMTP de Internet que suele residir en la red de su ISP.

Con las líneas telefónicas, cada vez que envíe un mensaje el enlace deberá ponerse en marcha. Esto puede estar bien si envía sólo un mensaje, pero si desea crear y enviar múltiples mensajes, conectar más de una vez puede ser tedioso y bastante caro. Además, si su ISP pone límites a las veces a las que está permitido conectarse, esto podría obligarle a postponer mensajes a ciertas horas del día, y debería enviarlas manualmente más tarde.

La sección 1 de este documento resuelve esa situación, sin embargo, en situaciones en las que la conexión se realice a partir de una búsqueda de servidor de nombres, el enlace se establecerá incluso aunque el mensaje se ponga en la cola y no llegue a enviarse. La razón de esto es que sendmail desea estandarizar los nombres de máquina.

La solución a este problema tiene dos partes: Primero: realizaremos cambio moderado en sendmail.cf. Y después debemos definir el proceso del actual reparto de mensajes. Personalmente, prefiero hacer que cron realice el trabajo en mi lugar, y para ello he descrito los cambios necesarios más abajo.

3.1 Configurando sendmail.cf

Por las razones ya comentadas en [1.2], recomiendo modificar los fuentes en m4 en lugar de editar sendmail.cf directamente. Ello le ahorrará mucho lío y hará que los cambios de configuración sean más explícitos.

Primero, realice todos los cambios descritos en la primera parte de este documento. Después vaya a la materia específica de conexión bajo petición (dial on demand).

Configurando sendmail.cf directamente, para configuraciones triviales

Configurar directamente es poco práctico y cualquier cosa menos explícito, pero es bastante obvio, si esa es su decisión.

Cerca del final de su sendmail.cf debería haber una línea como la siguiente:

R$* < @ $* $~P > $*               $: $1 < @ $[ $2 $3 $] > $4

Ponga al principio de esa línea una almohadilla "#" para que quede

#R$* < @ $* $~P > $*              $: $1 < @ $[ $2 $3 $] > $4

Configurando sendmail.cf utilizando el fuente m4.

Añada la siguiente línea al fichero /usr/src/sendmail-8.8.7/cf/cf/yourhostname.smtp.mc:

FEATURE(nocanonify)dnl

Su sendmail.cf final puede construirse después ejecutando los siguientes comandos. Recuerde siempre hacer copia de seguridad de su /etc/sendmail.cf antiguo antes de instalar el nuevo:

cp /etc/sendmail.cf /etc/sendmail.cf.bak
cd /usr/src/sendmail-8.8.7/cf/cf
m4 yourhostname.smtp.mc > /etc/sendmail.cf

3.2 Añadiendo un retardo de conexión

A veces es útil, en especial si utiliza líneas de módem, tener un retardo de conexión instalado. Esto quiere decir que si sendmail intenta establecer una conexión para enviar un mensaje (y esto hace que se marque el teléfono del proovedor) pero el enlace tarda más tiempo en establecerse que lo que sendmail piensa que sería un retardo razonable, sendmail simplemente esperará unos segundos y después lo reintentará.

Configurando sendmail.cf directamente

En algún lugar de su sendmail.cf podría haber una línea que dice:

#O DialDelay=10s

(o algo similar). Borre el "#". Si no hay un "#" al principio de la línea, las cosas están bien (sólo indica que ya había sido habilitado antes).

Si no hay una línea de ese aspecto en sendmail.cf, añada una (es una buena idea el añadirla en la sección "options" del fichero):

O DialDelay=10s

Ahora cambie la parte "10s" por el número de segundos que considere apropiado.

Configurando sendmail.cf utilizando el código m4

Añada la siguiente línea a /usr/src/sendmail-8.8.7/cf/cf/yourhostname.smtp.mc:

define(`confDIAL_DELAY',`10s')

Ahora cambie la parte "10s" al número de segundos que considere apropiado.

Su sendmail.cf definitivo puede entonces construirse ejecutando los siguientes comandos. Recuerde siempre hacer una copia de seguridad de su antiguo /etc/sendmail.cf antes de instalar el nuevo:

cp /etc/sendmail.cf /etc/sendmail.cf.bak
cd /usr/src/sendmail-8.8.7/cf/cf
m4 yourhostname.smtp.mc > /etc/sendmail.cf

4. Enviando mensajes

El envío de mensajes puede realizarse ejecutando el comando "sendmail -q" Para aquellos que estén interesados en lo que sendmail hace realmente, "sendmail -q -v" les proporcionará una versión algo más detallada del proceso.

Es muy conveniente automatizar el proceso de envío de mensajes. Una herramienta comúnmente utilizada para este proceso es cron.

4.1 Cómo hacer que los mensajes se envíen a horas específicas.

Edite su crontab:

crontab -e

Añada líneas al fichero:

05 18-23,0-7    * * Mon,Tue,Wed,Thu,Fri /usr/sbin/sendmail -q
05 *            * * Sat,Sun             /usr/sbin/sendmail -q

Lea la página de manual de crontab (disponible a través de "man 5 crontab" para más información. Creo que el formato es bastante obvio. El ejemplo anterior envía correo (si y solo sí hay correo disponible en la cola) 5 minutos después de la hora en punto los días de la semana, empezando a las 6:05 de la tarde y acabando a las 7:05 de la mañana. Los fines de semana, el correo se envía 5 minutos después de cada hora, comenzando a las 12:05 el sábado y finalizando a las 23:05 el domingo.

Como usuario de conexión bajo petición, a veces es desable hacer que el sistema recoja el correo mediante el protocolo POP3 a ciertas horas del día. Podría, por lo tanto, añadir una entrada similar a la siguiente en su crontab:

0 21            * * * popclient -3 -u <su nombre de usuario pop3
va aquí> -p <ponga aquí su contraseña> -o /var/spool/mail/<
el usuario de su sistema que debería recibir el e-mail recogido>
<mailhost.dominio.com>

Por supuesto, todo debería ir en una sóla línea.

Después, guarde el fichero y abandone el editor. El crontab debería ahora estar configurado.

Then, save the file and leave the editor. The crontab should now be installed.