Provided by: manpages-es_4.13-4_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 ficheroscuba

       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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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 ⟨⟩.