Provided by: manpages-es-extra_0.8a-16_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 detalle en la página de
       manual de procmailsc(5).

       Esta  página  de manual muestra varios ejemplos de recetas. Por ejemplo
       ficheros de recursos completos que puede comprobar en la sección  NOTAS
       en  procmail(1), o mirar a la parte de ejemplos de ficheros de recursos
       de la distribución fuente de procmail (procmail*/examples/?procmailrc).

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@somewhere.edu

              :0
              * ^From.*pedro
              * ^Subject:.*compiladores
              petcompil

       Si  vd.  es  completamente  nuevo  en procmail y quiere experimentar un
       poquito, con frecuencia ayuda tener  una  red  segura  de  algún  tipo.
       Inserte  las  dos siguientes recetas sobre todas las otras recetas para
       estar seguro de que todo el  correo  que  llega  siempre  conserva  los
       últimos  32  mensajes.  Para  que funcione como se prentende, tiene que
       crear un directorio llamado ‘backup’  en  $MAILDIR  antes  de  insertar
       estas dos recetas.

              :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:
              * encuentros
              ${CARPETAMESUAL}/meeting

       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 por unos 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), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1),
       grep(1), biff(1), comsat(8), mimencode(1), lockfile(1), formail(1)

AUTOR

       Stephen R. van den Berg
              <srb@cuci.nl>