Provided by: manpages-es-extra_0.8a-17_all bug

NOMBRE

       procmailex - ejemplos de ficheros de recursos

SINOPSIS

       Ejemplos de $HOME/.procmailrc

DESCRIPCI'ON

       Para   un  descripcion  del  formato  del  fichero  de  recursos  vease
       procmailrc(5).

       La tecnica de puntuacion de peso se describe en detalle en la pagina de
       manual de procmailsc(5).

       Esta  pagina  de manual muestra varios ejemplos de recetas. Por ejemplo
       ficheros de recursos completos que puede comprobar en la seccion  NOTAS
       en  procmail(1), o mirar a la parte de ejemplos de ficheros de recursos
       de la distribucion 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

       Reenvia todo el correo de  pedro  sobre  compiladores  a  guillermo  (y
       mantiene una copia aqui en petcompil).

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

                 :0
                 petcompil
              }

       Una solucion equivalente que realiza lo mismo:

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

                 :0 A
                 petcompil

       Una  solucion  equivalente,  pero  ligeramente mas 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 algun tipo.
       Inserte las dos siguientes recetas sobre todas las otras  recetas  para
       estar  seguro  de  que  todo  el  correo que llega siempre conserva los
       ultimos 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 lineas `From' iniciales incorrectas en
       cada mensaje, puede corregir esto llamando a procmail con la opcion -f-
       . Para corregir el mismo problema por medios  distintos,  podria  haber
       insertado  las dos siguientes recetas sobre todas las otras del fichero
       de recursos. Estas filtraran la cabecera de cualquier mensaje  mediante
       formail   que   elimina   cualquier   `From'   inicial  y  lo  regenera
       automaticamente a continuacion.

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

       Anade las cabeceras de todos los mensajes que no vienen del  postmaster
       a su coleccion de cabeceras privadas (para uso estadistico o depuracion
       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 tuberia
       ha finalizado, tendra que especificar la opcion `w'; en  otro  caso  el
       fichero  de  bloqueo  seria  eliminado  tan  pronto  como la tuberia ha
       aceptado el correo.

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

       O, si usara gzip, mas eficiente que compress:

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

       Reenvia todos los mensajes de  menos  de  1000  bytes  a  mi  direccion
       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 automatica. Se toma la seguridad que ni
       el correo de cualquier demonio (como correo rebotado o  correo  de  una
       lista),  ni las respuestas automaticas procedentes de usted mismo seran
       respondidas automaticamente.  Si no se toma  esta  precaucion,  podrian
       suceder  desastres  (correo en anillo). Para que esta receta responda a
       todo el correo entrante, desde  luego,  deberia  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(si,  la
       expresion regular !^FROM_DAEMON deberia coger esos, pero si la lista de
       correo  no  sigue  las  convenciones  aceptadas,  esto  podria  no  ser
       suficiente).

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

       Una  receta  de autorespuesta mas complicada que lleva a cabo funciones
       equivalentes al bien conocido programa  vacation(1)  Esta  receta  esta
       basada en los mismos principios que la ultima (previniendo el correo en
       `anillo'). Ademas 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  estara  seguro  que siempre
       contiene los nombres mas recientes, el tamano del fichero esta limitado
       a  un maximo de aproximadamente 8192 bytes).  Si el nombre es nuevo, se
       envia una respuesta automatica.

       Como puede  ver,  la  siguiente  receta  tiene  comentarios  entre  las
       condiciones.  Esto esta permitido.  Sin embargo no ponga comentarios en
       la misma linea que una condicion.

              SHELL=/bin/sh  # para otras shells, esto podria necesitar ajustes

              :0 Whc: vacation.lock
               # Realiza un chequeo rapido 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 esta en el cache
                | (formail -rI"Precedence: junk" \
                     -A"X-Loop: your@own.mail.address" ; \
                   echo "He recibido tu correo,"; \
                   echo "pero no regresare hasta el lunes."; \
                   echo "-- "; cat $HOME/.signature \
                  ) | $SENDMAIL -oi -t

       Almacena todos los mensajes  referentes  a  TeX  en  un  fichero  unico
       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 podria archivar el correo en varios carpetas directorios a  la  misma
       vez.   La  siguiente  receta  entregara  el  correo a carpetas MH y una
       carpeta directorio.  Actualmente es solo 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 esta en
       un directorio que cambia cada mes. V. g. si fuera  Enero  de  1994,  la
       carpeta  tendria  el  nombre `94-01/encuentros' y le fichero de bloqueo
       local seria `94-01/encuentros.lock'.

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

       Lo mismo que arriba, pero si el directorio  `94-01'  no  existiera,  se
       crearia automaticamente

              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  esta  suscrito  a  varias listas de correo y la gente envia 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 mas reciente  que  ha  recibido.  Como  se  garantiza  que  los
       identificadores  de  mensaje  son unicos para cada mensaje, son ideales
       para descartar los mensajes duplicados. Simplemente ponga la  siguiente
       receta al comienzo de su fichero de recursos y ningun mensaje duplicado
       lograta 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 proxima
       ejecucion  de  la  cola,  este  mensaje  se  considerara  duplicado   y
       seraeliminado.  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  periodicamente 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 tambien , 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 asincronas 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 podria llamar mientras `show'
       o `mark' u otro programa MH esta en ejecucion.  El  problema  se  epera
       corregir en alguna version futura de MH, pero hasta entonces tendra 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,  deberia  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  periodicamente  yu
       copiarlas  sobre  sus porpios ficheros emacs usando movemail.  Movemail
       usa ficheros de bloqueo locales buzon.lock por buzon.  Actualmente este
       es el modo de operacion preferido en conjuncion 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                            # metodo 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, podria usar
       algo como las lineas de:

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

       TRAP se puede usar para modificar el  codigo  de  salida  de  procmail.
       I.e.  si  quiere  que  procmail devuelva un codigo de salida de  `1' en
       lugar de sus codigos de salida regulares, podria usar:

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

       O, si el codigo de salida no  necesita  depender  de  la  ejecucion  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  mas  selectiva.  Solo
       imprime  el  fichero  postscript si viene del servidor de impresion. La
       primera condicion concuerda solo si se encuentra  en  la  cabecera.  La
       segunda condicion solo 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 estan en lugares distintos (i.e. solo podria leer  el  correo  que
       llega a una de las cuentas). Le gustaria 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 funcionara,
       desde luego, ya que estara 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  esta
       seguro  que  anade el mismo campo X-Loop: en ambos sitios, el correo se
       puede reenviar de una cuenta a otra con garantias.

              :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 envia un correo con la palabra  `retrieve'  en  el  campo
       `subject',  lo  siguiente  devolvera  automaticamente  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 continuacion 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
       distribucion de  procmail).  Como se indica, este servidor de  ficheros
       devuelve  solamente  un  fichero  por  peticion,  ignora  el cuerpo del
       mensaje recibido, la linea 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  esten  fuera  del  arbol  de  directorios del
       servidor de ficheros (si decide  usar  este  ejemplo,  este  seguro  de
       perder esta ultima restriccion 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  mas compacto que se puede usar y mostrar con mas facilidad por la
       mayoria 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  mas bien exotico, pero solo sirve para demostrar una
       caracteristica. Suponga que tiene un  fichero  en  su  directorio  HOME
       llamado  ".urgent",  y  la  unica persona incluida en ese fichero es el
       remitente de un correo  entrante,  y  le  gustaria  que  el  correo  se
       almacenara  en  $MAILDIR/urgent  en  lugar de cualesquiera de las otras
       carpetas de correo normales en las que lo habria puesto. Esto es lo que
       podria   hacer   (tenga   cuidado   con  la  longitud  del  fichero  de
       $HOME/.urgent que deberia estar  por  debajo  de  $LINEBUF,  incremente
       LINEBUF si es necesario):

              URGMATCH=`cat $HOME/.urgent`

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

       Una   aplicacion   completamente   diferente   a   procmail   aplicaria
       condicionalmente filtros a ciertos textos o  mensajes  (salientes).  Un
       ejemplo  tipico  seria  un  filtreo  a  traves del cual encauza todo su
       correo saliente, para estar seguro que se codificara con MIME  solo  si
       se necesita.

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

       El fichero de recursos mimeconvert podria contener algo como ( =0x80= y
       =0xff= se deberian sustituir por caracteres reales de 8 bits):

              DEFAULT=|     # tuberia a la salida estandar
                            # 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'EASE TAMBI'EN

       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>