2009-02-17 15 views
10

Tengo un requisito bastante habitual con procmail, pero no puedo obtener los resultados de alguna manera. Tengo procmailrc con este contenido:Quiere que procmail ejecute un script de python personalizado, cada vez que aparece un nuevo correo

:0 
* ^To.*@myhost 
| /usr/bin/python /work/scripts/privilege_emails_forward.py 

en que mi script en Python personalizado (privilege_emails_forward.py) va a escanear a través del correo electrónico recibido actualmente y hacer algunas operaciones sobre el contenido del correo. Pero no puedo hacer que el script se ejecute en el primer disparo (y mucho menos escanear el contenido del correo).

  • ¿Es esta la forma correcta de invocar un programa externo (python) tan pronto como llega un nuevo correo?
  • ¿Y cómo mi programa python (privilege_emails_forward.py) recibirá el correo como entrada? Quiero decir como sys.argv o stdin ????

Respuesta

11

Eso está bien, sólo hay que poner fw después :0 (:0 fw). Su programa python recibirá el correo en stdin. Tienes que 'repetir' el correo posiblemente transformado en stdout.

fw significa:

  • f en cuenta la tubería como un filtro.
  • w Espere a que el filtro o programa termine y verifique su código de salida (normalmente ignorado); si el filtro no tiene éxito, entonces el texto no se habrá filtrado.

Mi SPAM checker (bogofilter) simplemente funciona así. Agrega encabezados y las reglas posteriores de procmail hacen algo dependiendo de estos encabezados.

+0

Lo intenté también. Pero aún así no funciona No sé por qué :(Aquí está mi script procmailrc: : 0 * fw ^To.*@myhost |/usr/bin/python /work/scripts/privilege_emails_forward.py –

+0

tratar VERBOSE = sí y eche un vistazo en su archivo de registro procmail. ¡Quizás pueda detectar el error! –

+0

Johannes! Dado que este campo de texto de comentario no es suficiente para imprimir el resultado del registro de procmail, he dado el resultado como una RESPUESTA. en él. –

5

El log excerpt indica claramente que su script se ejecuta, incluso si no muestra el efecto deseado. Esperaría que procmail registrara un error si la ejecución fallara.

De todos modos, asegúrese de que el usuario (uid) con el que se ejecuta procmail tiene los permisos correctos para ejecutar su secuencia de comandos. Alambre de la secuencia de comandos en procmail sólo si tuvo éxito la prueba con algo como esto (reemplace 'procmail' con el fluido correcto):

 
# sudo -u procmail /bin/sh -c '/bin/cat /work/scripts/mail.txt | /usr/bin/python /work/scripts/privilege_emails_forward.py' 

Dependiendo de su configuración de sudo, que tendría que ejecutar como root. Ah, y asegúrese de utilizar rutas de archivos absolutas.

+0

Paprika impresionante! Intenté ejecutar el script que me diste con procmail reemplazado por webmail (cur usuario de alquiler), Mi script se ejecutó. Pero cuando recibo un correo (ya sea de alguien), mi procmail ejecuta el procmailrc ¿verdad? Entonces, ¿quién será el usuario correcto para ejecutar el script? –

+0

¡Paprika! Para explicarlo claramente, mi script de python personalizado tiene suficientes permisos (777), aún no se ejecuta automáticamente cuando recibo un correo. –

+1

Para averiguar en qué usuario se ejecuta su script de procmail, reemplace la línea del script en procmailrc con esto: '|/usr/bin/id -un>/tmp/procmailuser '¡No olvides el símbolo de tubería al frente! Después, verifique 'cat/tmp/procmailuser' debería revelar al usuario. – paprika

Cuestiones relacionadas