PROCMAILRC(5) | File Formats Manual | PROCMAILRC(5) |
procmailrc - fichero de recursos de procmail
$HOME/.procmailrc
Para un comienzo rápido, véase NOTAS al final de la página de manual de procmail(1).
El fichero de recursos puede contener una mezcla de asignaciones de variables de entorno (algunas de las cuales pueden tener un significado especial para procmail) y recetas. En su apariencia más simple, las recetas son sólamente una expresión regular de una línea que se busca en las cabeceras del correo entrante. La primera receta que concuerda se usa para determinar adonde tiene que ir el correo (normalmente un fichero). Si el procesado llega al final del fichero de recursos, procmail entrega el correo a $DEFAULT.
Hay dos clases de recetas: recetas de entrega y de no entrega. Si se encuentra una receta de entrega que concuerda, procmail considera el correo (vd. lo supone) entregado y terminará el procesamiento del fichero de recursos tras haber ejecutado adecuadamente la línea de acción de la receta. Si se encuentra una receta de no entrega que concuerda, el procesado del fichero de recursos continuará una vez que la línea de acción haya sido ejecutada.
Las recetas de entrega son aquellas que hacen que las cabeceras y/o cuerpo del corres sean: escritas a un fichero, absorbidas por un programa o reenviadas a otra dirección de correo.
Las recetas de no entrega son aquellas que: hacen que la salida de un programa o filtro sean capturadas por procmail o aquellas que inician un bloque anidado.
Le puede decir a procmail que trate una receta de entrega como si fueran una receta de no entrega especificando la cacera `c' en dicha receta. Esto hará que procmail genere una copia de carbón del correo para entregarlo a esta receta y continúa procesando el fichero de recursos.
Usando cierto número de recetas puede ordenar el correo en varias carpetas. Tenga en cuenta que el correo puede llegar de forma concurrente en estas carpetas (si varios programas procmail se ejecutan a la misma vez, no es improbable si llega mucho correo). Para estar seguro de que esto no degenera en problemas, es muy recomendable el uso de ficheros de bloqueo.
Las asignaciones de variables de entorno y recetas se pueden mezclar libremente en el fichero de recursos. Si cualquier variable de entorno tiene un significado especial para procmail, se usará apropiadamente en el momento en que se analiza (i.e. puede cambiar el directorio actual cuando quiera especificando un nuevo MAILDIR, cambiar ficheros de bloqueo especificando un nuevo LOCKFILE, cambiar umask en cualquier momento, etc., las posibilidades son ilimitadas :-).
Las asignaciones y sustituciones de estas variables de entorno se gestionan exactamente como en sh(1) (esto incluye todas las posibles comillas (quotes) y escapes), con el valor añadido de que los blancos alrededor del signo `=' se ignoran y que, si una variable de entorno aparece sin un '=' tras ella se elimina del entorno. Cualquier programa entre comillas invertidas (`) iniciado por procmail tendrá el todo el correo como su entrada estándar.
Una palabra que comience por # y el resto de los caracteres hasta el carácter de nueva línea se ignoran. Esto no se aplica a las líneas de condición, que no se pueden comentar.
Una línea que comience por ':' indica el comienzo de una receta. Esto tiene el siguiente formato:
:0 [banderas] [ : [fichero_bloqueo_local] ] <ninguna o más condiciones (una por línea)> <exactamente una línea de acción>
Las condiciones comienzan con un `*' inicial, todo lo que viene tras este carácter se pasa al egrep interno literalmente, salvo los espacios en blanco iniciales y finales. Estas expresiones regulares son completamente compatibles con las expresiones regulares extendidas del egrep(1) normal. Véase también Expresiones regulares extendidas.
La condiciones se unen mediante Y (and); si no hay condiciones el resultado será verdadero por defecto.
Banderas pueden ser cualesquiera de las siguientes:
Hay algunas condiciones especiales que puede usar que no son
expresiones regulares puras. Para seleccionarlas, la condición debe
comenzar con:
Si pone unos segundos ':' (detrás) en la primera línea de receta, entonces procmail usará un fichero de bloqueo local (para esta receta sólo). Opcionalmente puede especificar el fichero de bloqueo local que quiere usar; si no lo hace procmail usará el nombre de fichero destino (o el nombre de fichero a continuación del primer '>>') y le añadirá $LOCKEXT.
La línea de acción puede comenzar con los siguientes
caracteres:
Cualquier otra cosa se tomará como un nombre de buzón (bien un nombre de fichero o bien un directorio, absoluto o relativo al directorio actual (véase MAILDIR)). Si es un nombre de fichero (posiblemente inexistente), el correo se añade a él.
If it is a directory, the mail will be delivered to a newly
created, guaranteed to be unique file named $MSGPREFIX* in the specified
directory. If the mailbox name ends in "/.", then this directory
is presumed to be an MH folder; i.e., procmail will use the next number it
finds available. If the mailbox name ends in "/", then this
directory is presumed to be a maildir folder; i.e., procmail will deliver
the message to a file in a subdirectory named "tmp" and rename it
to be inside a subdirectory named "new". If the mailbox is
specified to be an MH folder or maildir folder, procmail will create the
necessary directories if they don't exist, rather than treat the mailbox as
a non-existent filename. When procmail is delivering to directories, you can
specify multiple directories to deliver to (procmail will do so utilising
hardlinks).
Otras variables limpiadas o prefijadas son IFS, ENV y PWD.
For security reasons, upon startup procmail will wipe out all
environment variables that are suspected of modifying the behavior of the
runtime linker.
Antes de que se pierda en la multitud de varables de entorno,
tenga en cuenta que todas ellas tienen valores por defecto razonables.
The following tokens are known to both the procmail internal egrep
and the standard egrep(1) (beware that some egrep implementations
include other non-standard extensions; in particular, the repetition
operator { is not supported by procmail's egrep):
Esto eran sólo ejemplos, desde luego, cualquier combinación más compleja es válida también.
Los significados de los siguientes elementos son extensiones
especiales de procmail:
Mire la página de manual procmailex(5).
Las líneas que continúan en la siguiente en una línea de acción que especifiquen un programa siempre tienen que terminar en barra invertida, incluso en el caso que la shell subyacente no necesitara o quisiera las barras invertidas para indicar la continuación. Esto es debido proceso de análisis en dos pasadas que se necesita (primero procmail, luego la shell (o no, dependiendo de SHELLMETAS)).
No ponga comentarios en las líneas de condiciones de expresiones regulares de una receta, estas líneas alimentan al egrep interno literalmente (salvo las barras invertidas al final de línea).
Los espacios en blanco iniciales en las continuaciones de expresiones regulares normalmente se ignoran (para que se pueda sangrar), pero no en las líneas de condición que se evalúan de acuerdo a las reglas de sustitución de sh(1) comprendidas entre comillas dobles.
Vigile los bloqueos muertos cuando haga cosas poco saludables como reenviar correo a us propia cuenta. Los bloqueos muertos se pueden romper con uso adecuado de LOCKTIMEOUT.
Cualesquiera valores por defecto que tenga procmail para alguna variable de entorno siempre se sobrepone a los que ya estuvieran definidos. Si realmente quiere sobreponer estos valores por defecto, los puede poner bien en el fichero de recursos o en la línea de mandatos como un argumento.
The /etc/procmailrc file cannot change the PATH setting seen by user rcfiles as the value is reset when procmail finishes the /etc/procmailrc file. While future enhancements are expected in this area, recompiling procmail with the desired value is currently the only correct solution.
Las variables de entorno fijadas dentro de la parte de acción interpretadas por la the shell-`|' de una receta no conservará sus valores tras haber finalizado la receta ya que se asignan en uan subshell de procmail. Para estar seguro de que el valor de las variables de entorno retienen su valor tiene que poner la asignación a la variable antes del `|' inicial de una receta, de forma que pueda capturar la salida estándar del programa.
Si especifica sólo una bandera `h' o una `b' en una receta
de entrega, y la receta concuerda, entonces, salvo que esté presente
la bandera `c' también, el cuerpo y las cabeceras respectivas del
correo se pierden silenciosamente.
procmail(1), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), uucp(1), aliases(5), sendmail(8), egrep(1), regexp(5), grep(1), biff(1), comsat(8), lockfile(1), formail(1)
The only substitutions of environment variables that can be handled by procmail itself are of the type $name, ${name}, ${name:-text}, ${name:+text}, ${name-text}, ${name+text}, $\name, $#, $n, $$, $?, $_, $- and $=; whereby $\name will be substituted by the all-magic-regular-expression-characters-disarmed equivalent of $name, $_ by the name of the current rcfile, $- by $LASTFOLDER and $= will contain the score of the last recipe. Furthermore, the result of $\name substitution will never be split on whitespace. When the -a or -m options are used, $# will expand to the number of arguments so specified and "$@" (the quotes are required) will expand to the specified arguments. However, "$@" will only be expanded when used in the argument list to a program, and then only one such occurrence will be expanded.
Unquoted variable expansions performed by procmail are always split on space, tab, and newline characters; the IFS variable is not used internally.
Procmail no soporta la expansión de `~'.
Se usa una línea de buffer de longitud $LINEBUF cuando se procesa el fichero de recursos, cualquier expansión que no se ajuste a estos límites se truncará y se asigna valor a PROCMAIL_OVERFLOW. Si la línea desbordada es una condición o una línea de acción, se considerará fallo y procmail continuará procesando. Si es una asignación de variable o línea de comienzo de receta entonces procmail abortará el fichero de recursos entero.
Si el fichero de bloquo global tiene una ruta relativa y el directorio actual no es el mismo que cuando el fichero de bloqueo local se creó, entonces el fichero de bloquo global no se eliminará si porcmail existe en ese punto (remedio: use rutas absolutas para especificar ficheros de bloqueo globales).
Si un fichero de recursos tiene una ruta relativa y cuando el fichero se abre por primera vez MAILDIR contiene una ruta relativa, y si en este punto procmail tiene que clonarse y el directorio actual ha cambiado desde que el fichero de recusos se abrió, entonces procmail no podrá colonarse él mismo (remedio: use una ruta absoluta para indicar el fichero de recursos o esté seguro que MAILDIR contiene una ruta absoluta como el fichero de recursos abierto).
Un fichero de bloqueo local de una receta que marca el comienzo de un bloque anidado sin fork no funciona como se esperaría.
Cuando capture la salida estándar de una receta en una variable de entorno, se eliminará exactamente un carácter final de nueva línea.
Some non-optimal and non-obvious regexps set MATCH to an incorrect
value. The regexp can be made to work by removing one or more unneeded '*',
'+', or '?' operator on the left-hand side of the \/ token.
Si la expresión regular contiene `^TO_' será sustituido por `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^-a-zA-Z0-9_.])?)', que debería capturar todas las especificaciones de destino que contienen una dirección específica.
Si la expresión regular contiene `^TO' será sustituido por `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^a-zA-Z])?)', que debería capturar todas las especificaciones de destino que contienen una palabra especifica.
Si la expresión regular contiene `^FROM_DAEMON' será sustituido por `(^(Mailing-List : |Precedence :.*(junk |bulk |list) |To : Multiple recipients of |(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)? |n) |office) |(send)?Mail(er)? |daemon |m(mdf |ajordomo) |n?uucp |LIST(SERV 'u' |proc) |NETSERV |o(wner |ps) |r(e(quest |sponse) |oot) |b(ounce 'u' |bs\.smtp) |echo |mirror |s(erv(ices? |er) |mtp(error)? |ystem) |A(dmin(istrator)? |MMGR |utoanswer))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$)))', que debería capturar los correos que llegan de la mayoría de los demonios (como es eso para una expresión regular :-).
Si la expresión regular contiene `^FROM_MAILER' se susrituirá por `(^(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)? |n) |office) |(send)?Mail(er)? |daemon |mmdf |n?uucp |ops |r(esponse |oot) |(bbs\.)?smtp(error)? |s(erv(ices? |er) |ystem) |A(dmin(istrator)? |MMGR))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$))' (una versión reducida de `^FROM_DAEMON'), que debería capturar los correo que llegan de la mayoría de los demonios de correo.
Cuando asigna valores booleanos a variables como VERBOSE, DELIVERED o COMSAT, procmail acepta como verdadero cualquier cadena que comience por un valor no cero, `on', `y', `t' or `e'. Falso es todo lo que empiece por una valor cero, `off',`n', `f' o `d'.
Si la línea de acción de una receta especifica un programa, un único par barra invertida-nueva línea en ella sobre una línea vacía se convertirá en una nueva línea.
El motor de expresión regular construido en procmail no
soporta denominaciones de clases de caracteres
Como lo espacios iniciales sin commillas son ignorados en el fichero de recuros, puede sangra el texto a su gusto.
El símpbolo `|' inicial en la línea de acción para especificar un programa o filtro se elimina antes de verificar $SHELLMETAS.
Los ficheros incluidos en la directiva INCLUDERC que sólo contengan asignaciones de variables de entorno se puede compartir con sh.
The current behavior of assignments on the command line to INCLUDERC and SWITCHRC is not guaranteed, has been changed once already, and may be changed again or removed in future releases.
Para procesamientos realmente complicados incluso puede considerar el llamar a procmail recursivamente.
En los viejos tiempos, la `:0' que marca el comienzo de una
receta, tuvo que cambiarse a `:n', donde `n' indica el número de
condiciones que siguen.
Stephen R. van den Berg
<srb@cuci.nl>
Philip A. Guenther
<guenther@sendmail.com>
La traducción al español de esta página del manual fue creada por Pedro Pablo Fábrega <pfabrega@arrakis.es>
Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org>..
2001/08/04 | BuGless |