Provided by: manpages-es-extra_0.8a-19_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>