Provided by: manpages-es_4.23.1-1_all bug

NOMBRE

       procmailex - ejemplos de ficheros de recursos

SINOPSIS

       Ejemplos de $HOME/.procmailrc

DESCRIPCIÓN

       Para un descripción del formato del fichero de recursos véase procmailrc(5).

       La técnica de puntuación de peso se describe en detalla en la página del manual procmailsc(5).

       This  man  page  shows several example recipes.  For examples of complete rcfiles you can check the NOTES
       section in procmail(1), or look at the example rcfiles in /usr/share/doc/procmail/examples.

EJEMPLOS

       Ordena todo el correo procedente de la lista de correo scuba-dive en la carpeta  de  correo  ficheroscuba
       (usa el fichero de bloqueo local scubafile.lock).

              :0: * ^TOscuba scubafile

       Reenvía todo el correo de pedro sobre compiladores a guillermo (y mantiene una copia aquí en petcompil).

              :0
              * ^From.*pedro
              * ^Subject:.*compiladores
              {
                 :0 c
                 ! guillermo@algunsitio.edu

                 :0
                 petcompil
              }

       Una solución equivalente que realiza lo mismo:

              :0 c * ^From.*pedro * ^Subject:.*compiladores ! guillermo@algunsitio.edu

                 :0 A
                 petcompil

       Una solución equivalente, pero ligeramente más lenta que realiza lo mismo:

              :0 c * ^From.*pedro * ^Subject:.*compiladores ! guillermo@algunsitio.edu

              :0 c * ^From.*pedro * ^Subject:.*compiladores !guillermo@somewhere.edu

       If you are fairly new to procmail and plan to experiment a little bit it often helps to have a safety net
       of  some  sort.   Inserting  the following two recipes above all other recipes will make sure that of all
       arriving mail always the last 32 messages will be preserved.  In order for it to work  as  intended,  you
       have to create a directory named `backup' in $MAILDIR prior to inserting these two recipes.

              :0 c backup

              :0 ic | cd backup && rm -f dummy `ls -t msg.* | sed -e 1,32d`

       Si su sistema no genera o genera líneas `From' iniciales incorrectas en cada mensaje, puede corregir esto
       llamando  a  procmail  con  la  opción -f- . Para corregir el mismo problema por medios distintos, podría
       haber insertado las dos siguientes recetas sobre todas las otras del fichero de recursos. Estas filtrarán
       la cabecera de cualquier mensaje mediante formail que elimina cualquier  `From'  inicial  y  lo  regenera
       automáticamente a continuación.

              :0 fhw | formail -I "From " -a "From "

       Añade  las  cabeceras  de  todos  los  mensajes  que no vienen del postmaster a su colección de cabeceras
       privadas (para uso estadístico o depuración de correo); y usa el fichero de bloqueo  `headc.lock'.   Para
       estar  seguro  de  que el fichero de bloqueo no se elimina hasta que la tubería ha finalizado, tendrá que
       especificar la opción `w'; en otro caso el fichero de bloqueo sería eliminado tan pronto como la  tubería
       ha aceptado el correo.

              :0 hwc: * !^FROM_MAILER | uncompress headc.Z; cat >>headc; compress
              headc

       O, si usara gzip, más eficiente que compress:

              :0 hwc: * !^FROM_MAILER | gzip >>headc.gz

       Reenvía  todos  los  mensajes  de  menos de 1000 bytes a mi dirección personal (no se necesita fichero de
       bloqueo en esta receta).

              :0 * < 1000 ! myname@home

       Divide las recopilaciones de la lista de correo surfing  en  mensajes  individuales  y  los  almacena  en
       surfing, usando como fichero de bloqueo local surfing.lock.

              :0: * ^Subject:.*surfing.*Digest | formail +1 -ds >>surfing

       Almacena  todo  lo  que  llega del postmaster o mailer-daemon (como correo rebotado) en el fichero postm,
       usando como fichero de bloqueo local postm.lock.

              :0: * ^FROM_MAILER postm

       Una simple receta de respuesta automática. Se toma la seguridad que ni el  correo  de  cualquier  demonio
       (como  correo  rebotado  o correo de una lista), ni las respuestas automáticas procedentes de usted mismo
       serán respondidas automáticamente.  Si no se toma esta precaución, podrían suceder desastres  (correo  en
       anillo).  Para  que esta receta responda a todo el correo entrante, desde luego, debería insertarla antes
       que cualquier otra receta en su fichero de recursos. Sin embargo es aconsejable  ponerla  tras  cualquier
       receta  que  procese  los  correos  de una lista de correo a la que estemos suscritos; generalmente no es
       buena idea generar autorespuestas a las lista de correo(sí, la expresión  regular  !^FROM_DAEMON  debería
       coger  esos,  pero  si  la  lista  de  correo  no  sigue  las  convenciones aceptadas, esto podría no ser
       suficiente).

              :0 h c
              * !^FROM_DAEMON
              * !^X-Loop: your@own.mail.address
              | (formail -r -I"Precedence: junk" \
                  -A"X-Loop: su_propia@dirección.de.correo" ; \
                 echo "Mail recibido.") | $SENDMAIL -t

       Una receta de autorespuesta más complicada que lleva a  cabo  funciones  equivalentes  al  bien  conocido
       programa  vacation(1)   Esta  receta  está  basada en los mismos principios que la última (previniendo el
       correo en `anillo'). Además de eso, sin embargo, mantiene una base de datos vacation extrayendo el nombre
       del  remitente  e  insertandolo  en  el  fichero  vacation.cache  si  el  nombre  es  nuevo  (el  fichero
       vacation.cache  lo  mantiene formail que estará seguro que siempre contiene los nombres más recientes, el
       tamaño del fichero está limitado a un máximo de aproximadamente 8192 bytes).  Si el nombre es  nuevo,  se
       envía una respuesta automática.

       Como  puede  ver, la siguiente receta tiene comentarios entre las condiciones.  Esto está permitido.  Sin
       embargo no ponga comentarios en la misma línea que una condición.

              SHELL=/bin/sh # para otras shells, esto podría necesitar ajustes

              :0 Whc: vacation.lock
               # Realiza un chequeo rápido para ver si el correo va dirigido a nosotros
              * $^To:.*\<$\LOGNAME\>
               # No responde a demonios ni a listas de correo
              * !^FROM_DAEMON
               # Los bucles de correo son un desastre
              * !^X-Loop: your@own.mail.address
              | formail -rD 8192 vacation.cache

                :0 ehc         # si el nombre no está en el caché
                | (formail -rI"Precedence: junk" \
                     -A"X-Loop: your@own.mail.address" ; \
                   echo "He recibido tu correo,"; \
                   echo "pero no regresaré hasta el lunes."; \
                   echo "-- "; cat $HOME/.signature \
                  ) | $SENDMAIL -oi -t

       Almacena todos los mensajes referentes a TeX en un fichero  único  separado,  en  un  directorio  llamado
       texmail (este directorio tiene que existir); no hay necesidad de usar ficheros locales de bloqueo en este
       caso, por tanto no lo haremos.

              :0 * (^TO|^Subject:.*)TeX[^t] texmail

       Lo  mismo  que  arriba, salvo que ahora almacenamos los mensajes en ficheros numerados (carpeta de correo
       MH).

              :0 * (^TO|^Subject:.*)TeX[^t] texmail/.

       O podría archivar el correo en varios carpetas directorios a la misma vez.  La siguiente receta entregará
       el correo a carpetas MH y una carpeta directorio.  Actualmente es sólo un fichero con dos  enlaces  duros
       extras.

              :0 * (^TO|^Subject:.*)TeX[^t] texmail/. wordprocessing dtp/.

       Almacena  todos  los  mensajes  sobre encuentros en una carpeta que está en un directorio que cambia cada
       mes. V. g. si fuera Enero de 1994, la carpeta tendría  el  nombre  `94-01/encuentros'  y  le  fichero  de
       bloqueo local sería `94-01/encuentros.lock'.

              :0: * meeting `date +%y-%m`/encuentros

       Lo mismo que arriba, pero si el directorio `94-01' no existiera, se crearía automáticamente

              CARPETAMESUAL=`date +%y-%m`

              :0 Wic * ? test ! -d $CARPETAMESUAL | mkdir $CARPETAMESUAL

              :0: * encuentro ${CARPETAMESUAL}/encuentro

       Lo mismo que arriba, pero con medios ligeramente diferentes:

              CARPETAMESUAL=`date +%y-%m` DUMMY=`test -d $CARPETAMESUAL || mkdir
              $CARPETAMESUAL`

              :0: * encuentro ${CARPETAMESUAL}/encuentro

       Si  está  suscrito  a  varias  listas  de  correo  y  la  gente envía mesajes cruzados a varias de ellas,
       normalmente recibe varios correos duplicados (uno de cada lista).  La  siguiente  receta  simple  elimina
       mensajes  duplicados.  Le dice a formail que mantenga un fichero cache de 8Kb en el cual se almacenan los
       identificadores de mensaje de los correos más reciente  que  ha  recibido.  Como  se  garantiza  que  los
       identificadores  de  mensaje  son  únicos  para  cada  mensaje,  son  ideales para descartar los mensajes
       duplicados. Simplemente ponga la siguiente receta al comienzo de su fichero de recursos y ningún  mensaje
       duplicado logratá pasarla.

              :0 Wh: msgid.lock | formail -D 8192 msgid.cache

       Tenga cuidado si tiene problemas de entrega en las recetas debajo de esto y procmail intenta reencolar el
       correo,  entonces  en  la  próxima  ejecución  de  la  cola,  este  mensaje  se  considerará  duplicado y
       seráeliminado. Para quienes quieren seguridad pueden usar la siguiente receta en su lugar. Esta pone  los
       duplicados  en  una  carpeta  separada en lugar de eliminarlos. Esto le obliga a vaciar periódicamente la
       carpeta, por supuesto.

              :0 Whc: msgid.lock | formail -D 8192 msgid.cache

              :0 a: duplicates

       Procmail puede entregar a carpetas MH directamente, pero no actualiza las secuencias no vistas que el  MH
       real  gestiona.  Si  quiere  que  procmail actualice estas también , use una receta como la siguiente que
       almacena todo lo que tenga la palabra spam en el cuerpo del mensaje en una carpeta MH  llamada  spamfold.
       Observe que el fichero de bloqueo local, que es necesario porque los progamas MH no bloquean el ficher de
       secuencias.   Las  llamadas  asíncronas  de  los  progamas MH que cambian el fichero de secuencias pueden
       corromper el fichero o simplemente perder los cambios.  Por desgracia, el fichero de bloqueo no  resuelve
       el  problema  completamente  ya que rcvstore se podría llamar mientras `show' o `mark' u otro programa MH
       está en ejecución. El problema se epera corregir en alguna versión futura  de  MH,  pero  hasta  entonces
       tendrá  que valorar el riesgo de perder o corromper las secuencias contra lo beneficios de las secuencias
       no vistas.

              :0 :spamfold/$LOCKEXT * B ?? spam | rcvstore +spamfold

       Cuando entregue a carpetas emacs (i.e. carpetas de correo gestionadas por cualquier paquete de correo  de
       emacs,  v.g.   RMAIL  o  VM)  directamente,  debería  usar ficheros de bloqueo compatibles con emacs. Los
       programas de correo de emacs son un poco descerebrados en ese respecto,  se  molestan  mucho  si  alguien
       entrega a carpetas de correo que ellos ya tienen en sus bufferes internos. La siguiente receta supone que
       $HOME es igual a /home/john.

              MAILDIR=Mail

              :0:/usr/local/lib/emacs/lock/!home!john!Mail!mailbox * ^Subject:.*loquesea
              mailbox

       De  forma  alternativa, puede hacer que procmail entrega en su propio conjunto de carpetas, las cuales se
       pueden vaciar periódicamente yu copiarlas sobre sus porpios ficheros emacs usando movemail.  Movemail usa
       ficheros de bloqueo locales buzón.lock por buzón.  Actualmente este es el modo de operación preferido  en
       conjunción con procmail.

       Para  extraer ciertas cabeceras de un correo y pponerlas en variables de entorno puede usar cualquiera de
       las siguientes construcciones:

              SUBJECT=`formail -xSubject:` # campo regular FROM=`formail -rt -xTo:` # caso
              especial

              :0 h # método alternativo KEYWORDS=| formail -xKeywords:

       Si usa ficheros temporales en un fichero procmailrc, y quieres estar seguro de que se eliminan  antes  de
       que procmail termine, podría usar algo como las líneas de:

              TEMPORARY=$HOME/tmp/pmail.$$ TRAP="/bin/rm -f $TEMPORARY"

       TRAP  se puede usar para modificar el código de salida de procmail.  I.e. si quiere que procmail devuelva
       un código de salida de `1' en lugar de sus códigos de salida regulares, podría usar:

              EXITCODE=""
              TRAP="exit 1;"   # El punto y coma final es importante.
                               # ya que exit no es un programa standalone

       O, si el código de salida no necesita depender de la ejecución  de  programas  de  TRAP,  puede  usar  un
       simple:

              EXITCODE=1

       La siguiente receta imprime cada correo de entrada que se parezca a un fichero postscript.

              :0 Bb * ^^%! | lpr

       La  siguiente  receta  hace  lo  mismo, pero un poco más selectiva. Sólo imprime el fichero postscript si
       viene del servidor de impresión. La primera condición concuerda sólo si se encuentra en la  cabecera.  La
       segunda condición sólo concuerda al comienzo del cuerpo.

              :0 b * ^From[ :].*print-server * B ?? ^^%! | lpr

       Lo mismo que arriba, pero con medios ligeramente diferentes:

              :0
              * ^From[ :].*print-server
              {
                :0 B b
                * ^^%!
                | lpr
              }

       Igualmente:

              :0 HB b * ^^(.+$)*From[ :].*print-server * ^^(.+$)*^%! | lpr

       Supongamos  que  tiene  dos  cuentas y usa esas dos cuentas regularmente, pero están en lugares distintos
       (i.e. sólo podría leer el correo que llega a una de las cuentas). Le  gustaría  reenviar  el  correo  que
       llega a la cuenta uno a la cuenta dos y al contrario. Lo primero que se viene a la mente es usar ficheros
       .forward en ambos sitios; esto no funcionará, desde luego, ya que estará creando un bucle de correo. Este
       bucle  se  puede  evitar  insertando  la  siguiente  receta  frente  a  todas  las  otras  recetas en los
       ficheros$HOME/.procmailrc de ambos sitios. Si está seguro que añade  el  mismo  campo  X-Loop:  en  ambos
       sitios, el correo se puede reenviar de una cuenta a otra con garantías.

              :0 c
              * !^X-Loop: yourname@your.main.mail.address
              | formail -A "X-Loop: yourname@your.main.mail.address" | \
                 $SENDMAIL -oi yourname@the.other.account

       Si  alguien  le  envía  un correo con la palabra `retrieve' en el campo `subject', lo siguiente devolverá
       automáticamente el contenido del fichero info_file al remitente. Como en todas las recetas donde enviamos
       correo, tenemos que vigilar los bucles de correo.

              :0 * !^From +YOUR_USERNAME * !^Subject:.*Re: * !^FROM_DAEMON *
              ^Subject:.*retrieve | (formail -r ; cat info_file) | $SENDMAIL -oi -t

       A continuación un ejemplo para un simple servidor de ficheros accesible por correo. Para aplicaciones con
       mayores exigencias, le sugiero que le eche un vistazo a SmartList (disponible en el mismo  lugar  que  la
       distribución  de  procmail).  Como se indica, este servidor de ficheros devuelve sólamente un fichero por
       petición, ignora el cuerpo del mensaje recibido, la línea Subject: tiene que parecerse a "Subject:  envia
       fichero  el_fichero_que_quiere"  (los  espacios  en  blanco son significativos), no devuelve ficheros que
       empiezan por punto ni permite recuperar ficheros que estén fuera del árbol de directorios del servidor de
       ficheros (si decide usar este ejemplo, esté seguro de perder esta última restricción por descuido).

              :0
              * ^Subject: send file [0-9a-z]
              * !^X-Loop: yourname@your.main.mail.address
              * !^Subject:.*Re:
              * !^FROM_DAEMON
              * !^Subject: send file .*[/.]\.
              {
                MAILDIR=$HOME/fileserver # cambiar al directorio del servidor de ficheros

                :0 fhw                   # invierte las cabeceras y extrae el nombre
                * ^Subject: send file \/[^ ]*
                | formail -rA "X-Loop: yourname@your.main.mail.address"

                FILE="$MATCH"            # el fichero soliciatado

                :0 ah
                | cat - ./$FILE 2>&1 | $SENDMAIL -oi -t
              }

       El siguiente ejemplo pre-convierte todos los correos  que  llegan  en  texto  simple  en  cierto  formato
       codificado  MIME en otro formato de 8 bits más compacto que se puede usar y mostrar con más facilidad por
       la mayoría de los programas. El programa  mimencode(1)   es  parte  del  paquete  metamail  de  Nathaniel
       Borenstein.

              :0
              * ^Content-Type: *text/plain
              {
                :0 fbw
                * ^Content-Transfer-Encoding: *quoted-printable
                | mimencode -u -q

                   :0 Afhw
                   | formail -I "Content-Transfer-Encoding: 8bit"

                :0 fbw
                * ^Content-Transfer-Encoding: *base64
                | mimencode -u -b

                   :0 Afhw
                   | formail -I "Content-Transfer-Encoding: 8bit"
              }

       El siguiente es más bien exótico, pero sólo sirve para demostrar una característica. Suponga que tiene un
       fichero  en  su  directorio  HOME  llamado  ".urgent",  y  la única persona incluida en ese fichero es el
       remitente de un correo entrante, y le gustaría que el correo se almacenara en $MAILDIR/urgent en lugar de
       cualesquiera de las otras carpetas de correo normales en las que lo habría puesto. Esto es lo que  podría
       hacer  (tenga  cuidado  con  la  longitud  del  fichero  de $HOME/.urgent que debería estar por debajo de
       $LINEBUF, incremente LINEBUF si es necesario):

              URGMATCH=`cat $HOME/.urgent`

              :0: * $^From.*${URGMATCH} urgent

       Una aplicación completamente diferente a procmail aplicaría condicionalmente filtros a ciertos  textos  o
       mensajes  (salientes).  Un  ejemplo  típico  sería  un  filtreo  a través del cual encauza todo su correo
       saliente, para estar seguro que se codificará con MIME sólo si se necesita.

              cat newtext | procmail ./mimeconvert | mail chris@where.ever

       El fichero de recursos mimeconvert podría contener algo como ( =0x80= y =0xff= se deberían sustituir  por
       caracteres reales de 8 bits):

              DEFAULT=|     # tubería a la salida estándar
                            # de entrega de correo como es normal
              :0 Bfbw
              * [=0x80=-=0xff=]
              | mimencode -q

                :0 Afhw
                | formail -I 'MIME-Version: 1.0' \
                   -I 'Content-Type: text/plain; charset=ISO-8859-1' \
                   -I 'Content-Transfer-Encoding: quoted-printable'

VÉASE TAMBIÉN

       procmail(1), procmailrc(5), procmailsc(5), sh(1), csh(1), mail(1), mailx(1), uucp(1), aliases(5),
       sendmail(8), egrep(1), grep(1), biff(1), comsat(8), mimencode(1), lockfile(1), formail(1)

AUTORES

       Stephen R. van den Berg
              <srb@cuci.nl>
       Philip A. Guenther
              <guenther@sendmail.com>

TRADUCCIÓN

       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.

BuGless                                            2001/08/04                                      PROCMAILEX(5)