2009-02-17 13 views
10

Ho un requisito piuttosto normale con procmail ma non riesco a ottenere i risultati in qualche modo. Ho lima procmailrc con questo contenuto:Vuoi procmail per eseguire uno script python personalizzato, ogni volta che appare una nuova mail

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

In cui il mio script python personalizzato (privilege_emails_forward.py) sarà la scansione attraverso l'e-mail in fase di ricezione e fare alcune operazioni sul contenuto della posta. Ma non riesco a far eseguire lo script al primo colpo (figuriamoci a scannerizzare il contenuto della posta).

  • È un modo corretto di richiamare un programma esterno (python) non appena arriva la nuova posta?
  • E in che modo il mio programma python (privilege_emails_forward.py) riceverà la posta come input? Voglio dire come sys.argv o stdin ????

risposta

11

Questo è bene, basta mettere fw dopo :0 (:0 fw). Il tuo programma python riceverà la posta su stdin. Devi "echo" la posta eventualmente trasformata su stdout.

fw significa:

  • f consideri il tubo come filtro.
  • w Attendere il completamento del filtro o del programma e controllarne il codice di uscita (normalmente ignorato); se il filtro non ha successo, il testo non sarà stato filtrato.

Il mio correttore SPAM (bogofilter) funziona proprio così. Aggiunge le intestazioni e in seguito le regole procmail fanno qualcosa a seconda di queste intestazioni.

+0

Ho provato anche quello. Ma ancora non funziona Non so perché :(Ecco il mio script procmailrc: : 0 fw * ^To.*@myhost |/usr/bin/python /work/scripts/privilege_emails_forward.py –

+0

provare VERBOSE = sì e dai un'occhiata al tuo file di log di procmail. Forse puoi individuare l'errore! –

+0

Johannes! Dal momento che questo campo di testo dei commenti non è sufficiente per stampare l'output del registro di procmail, ho dato l'output come ANSWER. –

5

log excerpt indica chiaramente che lo script è stato eseguito, anche se non mostra l'effetto desiderato. Mi aspetterei che procmail registri un errore se l'esecuzione fallisce.

In ogni caso, assicurarsi che l'utente (uid) con cui procmail è stato eseguito abbia le autorizzazioni corrette per eseguire lo script. Filo lo script in procmail solo se si è riuscito il test con qualcosa di simile (sostituire 'procmail' con l'uid corretto):

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

A seconda della configurazione di sudo, che avrebbe dovuto eseguire questo come root. Oh, e assicurati di utilizzare percorsi di file assoluti.

+0

Paprika fantastica! Ho provato a eseguire lo script che hai dato con procmail sostituito con webmail (grazie affitta utente), il mio script è stato eseguito. Ma quando ricevo una mail (provenire da qualcuno), la mia procmail esegue procmailrc giusto? Quindi, chi sarà l'utente corretto per eseguire lo script? –

+0

Paprika! Per spiegare chiaramente, il mio script python personalizzato ha abbastanza permessi (777), ma non viene eseguito automaticamente quando ricevo una mail –

+1

Per scoprire come utente viene eseguito il tuo script procmail, sostituisci la riga dello script nel tuo procmailrc con questo: '|/usr/bin/id -un>/tmp/procmailuser 'Don' dimentica il simbolo del tubo davanti! Successivamente, selezionare 'cat/tmp/procmailuser' dovrebbe rivelare l'utente. – paprika

Problemi correlati