PROCMAIL(1) | General Commands Manual | PROCMAIL(1) |
procmail - procesador autónomo de correo
procmail [-ptoY] [-f dequien]
[parámetro=valor | fichero_de_recursos] ...
procmail [-toY] [-f dequien] [-a
argumento] -d recipiente ...
procmail [-ptY] -m [parámetro=valor]
... fichero_de_recursos [argumento] ...
procmail -v
Para un comienzo rápido véase NOTAS al final.
Procmail se debería llamar automáticamente sobre el mecanismo del fichero .forward tan pronto como llegue el correo. De forma alternativa, cuando se lo instale el administrador del sistema, se puede llamar desde el programa de correo inmediatamente. Cuando se llama, primero fija algunas variables de entorno a sus valores por defecto, lee el mensaje de correo de la entrada estándar hasta un EOF, separa el cuerpo de la cabecera, y entonces, si no hay argumentos en la línea de mandatos, empieza a buscar un fichero llamado $HOME/.procmailrc. De acuerdo con las recetas de procesado de este fichero, el mensaje de correo que acaba de llegar se distribuye a la carpeta adecuada (y más). Si no se encuentra fichero_de_recursos, o el procesado del fichero_de_recursos llega al final, procmail almacenará el mensaje en el buzón por defecto del sistema.
Si no se ha especificado fichero_de_recursos y tampoco se ha especificado la opción -p en la línea de mandatos, procmail, antes de leer $HOME/.procmailrc, interpreta los mandatos de /etc/procmailrc (if existe). Hay que tener cuidado cuando se cree /etc/procmailrc, debido, si las circunstancias lo permiten, se ejecutará con privilegios de root (contrario al fichero $HOME/.procmailrc por supuesto).
Sise ejecuta con suid root o con privilegios de root, procmail podrá funcionar con funcionalidad mejorada, compatible con el agente de entrega.
Procmail también se puede usar como filtro de correo de propósito general, i.e. se han realizado las medidas necesarias para que procmail se pueda llamar en un regla especial de sendmail.
El formato del fichero_de_recursos se describe en detalle en la página de manual procmailrc(5).
La técnica de puntuación de peso se describe en detalla en la página del manual procmailsc(5).
Se pueden encontrar ejemplos de recetas del fichero_de_recursos en
la página del manual procmailex(5).
Cualesquiera argumentos que contengan un '=' se consideran asignaciosn de variables de entorno, todas serán evaluadas tras asignar los valores por defecto y antes de abrir el primer fichero_de_recursos.
Cualesquiera otros argumentos se supone que son rutas de fichero_de_recursos (bien absolutas o relativas al directorio actual si empiezan por `./'; cualquier otra ruta es relativa a $HOME, salvo que se haya dado la opción -m, en cuyo caso todas las rutas relativas son relativas al directorio actual); procmail empezará con el primero que encuentre en la línea de mandatos. Los siguientes sólo se analizan si los previos tienen una entrada de directiva de no concordancia con HOST, o en l caso de que no existieran.
Si no se ha especificado fichero_de_recursos, buscará
$HOME/.procmailrc. Si no lo ha podido encontrar, el procesamiento
continuará de acuerdo a los valores por defecto de las variables de
entorno y las especificadas en la línea de comando.
Se pueden encontar ejemplos de recetas para fichero_de_recursos en la página de manual procmailex(5). Se puede encontrar n ejemplo pequeño de fichero_de_recursos en la sección NOTAS más abajo.
Salte el resto de estos EJEMPLOS salvo que sea un administrador de systema que esté vagamente familiarizado con la sintaxis de sendmail.cf.
La opción -m se usa típicamente cuando procmail se llama desde una regla del fichero sendmail.cf. Para poder hacer esto es conveniente crear un "mailer" procmail extra en su fichero sendmail.cf (además del, quizás presente "mailer" local que lanza procmail). Para crear el "mailer" `procmail' le sugiero algo como:
Mprocmail, P=/usr/bin/procmail, F=mSDFMhun, S=11, R=21,
A=procmail -m $h $g $u
Esto le permite usar reglas como las siguientes (más probable en ruleset 0) para filtrar correo a través del mailer procmail (por favor observe el tabulador inicial para continuar la regla, y el tabulador para separar los comentarios):
R$*<@some.where>$*
$#procmail $@/etc/procmailrcs/some.rc $:$1@some.where.procmail$2 R$*<@$*.procmail>$*
$1<@$2>$3 Ya filtrado, map back
Y /etc/procmailrcs/some.rc podría ser tan simple como:
:0 # elimina el correo basura * ^Subject:.*junk /dev/null :0 # pasa el resto del correo ! -oi -f "$@"
Vigile cuando envíe correo desde un fichero
/etc/procmailrcs/some.rc file, si envía correo a direcciones que
concuerdan la primera regla de nuevo, podría estar creando un bucle
de correo sin fin.
procmailrc(5), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1), grep(1), biff(1), comsat(8), lockfile(1), formail(1), cron(1)
Los diagnósticos extendidos se pueden activar o desactivar
fijando la variable VERBOSE .
Debería crear un guion de shell que use lockfile(1) antes de llamar a su shell de correo sobre cualquier fichero buzón distinto del buzón del sistema (salvo, por supuesto, que su shell de correo use el mismo fichero de bloqueo (local o global) que especificó en su fichero_de_recursos).
En el caso improbable de que necesite absolutamente matar al procmail antes de que haya acabado, primero intente y use el comando regular kill (i.e. no kill -9, véase la subsección Signals para sugerencias), en otro caso algún fichero de bloqueo podría no eliminarse.
Tenga cuidado cuando use la opción -t, si procmail repetidamente es incapaz de de entregar el correo (v.g. debido a un fichero_de_recursos incorrecto), la cola de correo del sistema podría llenarse. Esto podría molestar al postmaster local y a otros usuarios.
El fichero /etc/procmailrc se podría ejecutar con privilegios de root, por tanto, tenga cuidado con lo que pone en él. SHELL será igual a la del recipiente actual, por tanto, si procmail tiene que llamar a la shell, mejor la pone prrimero como un valor seguro. Véase también : DROPPRIVS.
Tenga en cuenta que si se permite chown(1) en ficheros de /etc/procmailrcs/, se pueden cambiar a root (o cualquier otro) por sus actuales propietarios. Para una seguridad máxima, esté seguro de que este directorio es ejecutable sólamente por root.
Procmail no es la herramienta adecuada pra compartir un
buzón entre varios usuarios, tales como cuando tiene una cuenta POP3
para todo el correo de su dominio. Se puede hacer si configura su MTA para
añadir algunas cabeceras con los datos del sobre del recipiente para
decir a procmail para quien es el mensaje, pero esto normalmente no es la
forma correcta de hacerlo. Quizás quiera investigar si su MTA se
ofrece `tablas de usuarios virtuales' o ver v.g. la facilidad `multidrop' de
Fetchmail.
Tras eliminar un fichero de bloqueo por la fuerza, procmail espera $SUSPEND segundos antes de de crear un nuevo fichero de bloqueo de forma que otro proceso que decida eliminar el fichero de bloqueo viejo no eliminará por error el nuevo bloqueo creado.
Procmail usa la señal regular TERMINATE para terminar cualquier filtro que esté corriendo, pero no verifica si el filtro responde a esa señal y sólo la envía al propio filtro, no a los hijos del filtro.
Un campo Content-Length: que continúe no se gestiona correctamente.
Los caracteres de nueva línea embebidos en una cabecera que
continúe se deberían saltar cuando concuerden en lugar de ser
tratados como un simple espacio como ahora.
Si existe un campo Content-Length: en la cabecera del correo y no se ha especificado la opción -Y, procmail eliminará espacios para indicar el tamaño correcto. Procmail no cambia el ancho de campo.
Si no existe campo Content-Length: o se ha especificado la opción -Y y procmail añade a buzones regulares, cualquier línea del cuerpo del mensaje que parezca un marca de correo se precede con `>' (desactiva falsas cabeceras). La expresión regular que se usa para buscar estas marcas de correo es:
`\nFrom '
Si el nombre destino usado en el modo de entrega explícito
no está en
/etc/passwd, procmail procederá como si el modo de entrega
explícito no tuviera efecto. Si no está en modo de entrega
explícito y el uid bajo el que se ejecuta procmail no tiene la
correspondiente entrada en /etc/passwd, entonces HOME tomará por
defecto /, LOGNAME será #uid y SHELL será por defecto
/bin/sh.
Cuando está en modo de entrega explícito, procmail generará una línea `From' inicial si no está presente. Si alguna está ya presente, procmail la dejará intacta. Si procmail no se llama con alguno de los siguientes identificadores de usuario o grupo : root, daemon, uucp, mail, x400, network, list, slist, lists o news, pero todavía tiene que generar o aceptar una nueva línea `From ', generará una línea `>From ' inicial para ayudar a distinguir correos falsos.
Por razones de seguridad, procmail sólo usará un fichero_de_recursos absoluto o relativo a $HOME si es propiedad del recipiente o root, si permiso de escritura global y el directorio que lo contiene no tiene permiso de escritura global. El fichero $HOME/.procmailrc tiene la restricción adicional de no tener permiso de escritura para el grupo ni el directorio que lo contiene tampoco.
Si /var/spool/mail/$LOGNAME es un buzón inviable (i.e. no
pertenece al recipiente, no se puede escribir, es un enlace simbólico
o es un enlace duro), procmail al empezar intentará renombrarlo como
un fichero empezando por `BOGUS.$LOGNAME.' y terminando en un código
de secuencia de i-nodo. Si esto resulta imposible ORGMAIL no
tendrá valor inicial, y por tanto se inhibirá de la entrega
sin un fichero de
fichero_de_recursos adecuado.
Si /var/spool/mail/$LOGNAME es ya un buzón válido, pero tiene que perder muchos permisos, procmail corregirá esto. Para prevenir que procmail haga esto, esté seguro de poner el bit u+x.
Cuando se entregue a directorios (o carpetas MH) no necesita usar ficheros de bloqueo para prevernir varios procmail en ejecución concurrentes lo estropeen.
La entrega a carpetas MH consume ligeramente más tiempo que la entrega a directorios normales o buzones, ya que procmail tiene que buscar el suiguiente número disponible (en lugar de tener el nombre de fichero disponible de forma inmediata).
En caso de fallo general procmail devolverá EX_CANTCREAT, salvo que se especifique la opción -t, en cuyo caso devolverá EX_TEMPFAIL.
Para hacer un `egrep' más consistente de las cabeceras, procmail concatena todos los campos de cabecera continuados; pero sólo interamente. Cuando se entregue el correo, las rupturas de línea aparecerán como antes.
Si procmail se llama bajo un nombre que no empieza por `procmail'
(v.g. si está enlazado a otro nombre y es llamado como tal), se pone
en modo de entrega explícito, y espera los nombres de recipientes
como argumentos de la línea de mandato (como si se hubiera
especificado
-d ).
Las notificaciones comsat/biff se realizan usando udp. Se envían una vez que procmail genera la entrada regular al fichero de registo. La notificación de mensajes tiene el siguiente formato extendido (o tan parecido como se pueda cuando la entrega fial no sea un fichero):
$LOGNAME@desplazamiento_del_mensaje_en_buzón :ruta_absoluta_al_buzón
Cuando el mismo procmail abre un fichero para entregar, usa la siguiente estrategia de bloqueo del núcleo : fcntl(2).
Procmail resistente a NFS-resistant y procesa los 8 bits.
La llamada a procmail con las opciones -h o -? hará que muestre una ayuda en la línea de mandatos de una página de referencia rápida y las banderas de las recetas.
Existe una PUF (FAQ) excelente para novatos sobre filtros de correo (y procmail en particular), la mantiene Nancy McGough <nancym@ii.com> y se puede obtener enviando un mensaje a mail-server@rtfm.mit.edu con lo siguiente en el cuerpo:
send usenet/news.answers/mail/filtering-faq
En lugar de usar la llamada de procmail proporcionada por el sistema cuando llega el correo, puede controlar la llamada Vd. mismo. En este caso su fichero $HOME/.forward (tenga cuidado, tiene que tener permiso global de lectura) debería contener la línea de abajo. Esté seguro de incluir las comillas dobles y simples, y tiene que ser una ruta absoluta. #YOUR_USERNAME actualmente no es un parámetro que sea requerido por procmail, de hecho, se descartará por sh antes de que incluso procmail lo vea; sin embargo es un truco de programación necesario contra programas sendmail sobreoptimizados.
" |exec /usr/bin/procmail"
Procmail también se puede llamar para procesar a posteriori un buzón del sistema lleno con anterioridad. Esto puede ser útil si no quiere o no puede un fichero $HOME/.forward (en cuyo caso el siguiente guión se podría llamar periódicamente desde cron(1), o cuando empiece a leer el correo):
#!/bin/sh ORGMAIL=/var/spool/mail/$LOGNAME if cd $HOME &&
test -s $ORGMAIL &&
lockfile -r0 -l1024 .newmail.lock 2>/dev/null then
trap "rm -f .newmail.lock" 1 2 3 13 15
umask 077
lockfile -l1024 -ml
cat $ORGMAIL >>.newmail &&
cat /dev/null >$ORGMAIL
lockfile -mu
formail -s procmail <.newmail &&
rm -f .newmail
rm -f .newmail.lock fi exit 0
PATH=/bin:/usr/bin:/usr/bin MAILDIR=$HOME/Mail #mejor esté seguro de que existe DEFAULT=$MAILDIR/mbox #completamente opcional LOGFILE=$MAILDIR/from #recomendado :0: * ^From.*berg from_me :0 * ^Subject:.*Flame /dev/null
Se pueden encontrar otros ejemplos de recetas de fichero_de_recursos en la página del manual procmailex(5).
Este programa es parte del This program is part of the paquete de procesamiento de correo procmail (v3.13.1) disponible en http://www.procmail.org/ o ftp.procmail.org en pub/procmail/.
Existe un lista de correo para cuestiones relacionadas con cualquier programa del paquete procmail:
<procmail-users@procmail.org>
para enviar preguntas/respuestas
para solicitudes de suscripción.
Si quisiera estar informado sobre nuevas versiones y parches oficiales
envíe una solicitud de suscripción a
procmail-announce-request@procmail.org
Stephen R. van den Berg
<srb@cuci.nl>
1999/03/30 | BuGless |