Estoy usando procmail
reglas Maildir/
sencillas como la siguiente para guardar los correos electrónicos entrantes en directorios:
:0:
* ^X-Spam-Status: Yes
Spam/
Ahora me gustaría recibir una notificación en el escritorio sobre nuevos correos electrónicos en ciertos directorios/reglas. Ya sé cómo manejar las notificaciones, pero cómo indicar procmail
que se guarden en un directorio.yejecutar un script?
Sé que puedotubopero |command
preferiría dejar que procmail
se guarde el archivo y luego simplemente ejecutar un script.
Tener el correo electrónico (al menos los encabezados) en la tubería o la ruta del directorio + archivo como argumentos sería bueno, ejecutar el script de forma asincrónica también sería bueno.
actualizar
Entonces, según la respuesta de @slm, ese es el resultado:
:0 c:
* ^X-Spam-Status: Yes
Spam/
:0 Whi
* ^X-Spam-Status: Yes
| $HOME/install/bin/notify.sh
c
Copiarel mensaje en el directorio pero continúa con las siguientes reglas
No lo estoy usando f
porque no es un filtro, si la regla coincide, quiero que procmail se detenga aquí (espero no malinterpretar el manual aquí)
W
para suprimir cualquier fallo del programa
h
atubosolo encabezados
i
para ignorar cualquier error de escritura en la tubería
No lo estoy usando w
porque no quiero esperar a que regrese el script.
Creo que tampoco necesito un archivo de bloqueo (no :
después Whi
)
actualización 5/12/14
Al final, adopté exactamente la solución que propuso @tripleee.
También jugué mailutils-comsatd
durante unos minutos antes de rendirme.
.procmailrc:
COMSAT=no
Respuesta1
Para ejecutar el correo a través de un script, puede modificar su regla usando 2 reglas:
:0: c
* ^X-Spam-Status: Yes
Spam/
:0: fw
* ^X-Spam-Status: Yes
| /usr/bin/python /work/scripts/process_mail.bash
Su programa recibirá el correo en STDIN. Tendrás que hacer eco del correo posiblemente transformado en STDOUT.
fw significa:
f
Considere la tubería como un filtro.w
Espere a que finalice el filtro o programa y verifique su código de salida (normalmente ignorado); si el filtro no tiene éxito, entonces el texto no habrá sido filtrado.c
Genere una copia carbón de este correo. Esto sólo tiene sentido al entregar recetas. La única receta que no se entrega a la que este indicador tiene efecto es en un bloque de anidamiento. Para generar una copia, esto clonará el proceso de procmail en ejecución (los archivos de bloqueo no se heredarán), por lo que la clonación procederá como de costumbre y el padre saltará a través de la cuadra.
Referencias
Respuesta2
Aquí hay una ligera adaptación de la respuesta de @slm.
No deberías usar el bloqueo con Maildir, y las banderas y los dos puntos del bloqueo estaban al revés. (En realidad, crearía un archivo de bloqueo llamado c
, en lugar de clonar el mensaje, por lo que la segunda acción nunca se activaría).
La f
bandera parece fuera de lugar.
Invertí el orden de las acciones; Si bien tiene sentido entregar y luego notificar, desde el punto de vista de Procmail, la notificación es una acción secundaria que puede fallar, así que lo hago en un clon e ignoro su estado de salida.
Finalmente, agrupar dos acciones bajo una condición es más intuitivo usando llaves.
:0
* ^X-Spam-Status: Yes
{
:0cWhi
| $HOME/install/bin/notify.sh
:0
Spam/
}
Dicho esto, también observo que Procmail ya genera comsat
notificaciones listas para usar. Es un protocolo de notificación heredado, pero es posible que puedas usarlo para algo. En segundo lugar, se podría crear un mecanismo de notificación simple utilizando un script que lo monitoree procmail.log
. (Pero sí, analizar archivos de registro apesta).