2009-02-17 3 views
10

У меня довольно обычное требование с procmail, но я не могу получить результаты каким-то образом. У меня есть procmailrc файл с таким содержанием:Хотите, чтобы procmail запускал собственный скрипт python, каждый раз, когда появляется новая почта

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

В чем мой пользовательский питон скрипт (privilege_emails_forward.py) будет сканировать через электронную почту в настоящее время получил и сделать некоторые операции на содержание почты. Но я не могу заставить сценарий запускаться на первом снимке (не говоря уже о сканировании через почтовый контент).

  • Это правильный способ вызова внешней программы (python), как только приходит новая почта?
  • И как моя программа python (privilege_emails_forward.py) получит почту как вход? Я имею ввиду как sys.argv или stdin ????

ответ

11

Это просто прекрасно, просто положить fw после :0 (:0 fw). Ваша программа python получит почту по адресу stdin. Вы должны «эхо», возможно, преобразованное письмо на stdout.

fw означает:

  • f Рассмотрим трубу в качестве фильтра.
  • w Дождитесь окончания работы фильтра или программы и проверьте его код выхода (обычно игнорируется); если фильтр не увенчался успехом, текст не будет отфильтрован.

Моя контрольная лампа SPAM (богофильтр) работает именно так. Он добавляет заголовки, а позже procmail-rules делает что-то в зависимости от этих заголовков.

+0

Я тоже это пробовал. Но все же это не работает. Я не знаю, почему :(Вот мой скрипт procmailrc: : 0 fw * ^To.*@myhost |/usr/bin/python /work/scripts/privilege_emails_forward.py –

+0

попробуйте VERBOSE = yes и заглянуть в файл журнала procmail. Возможно, вы можете обнаружить ошибку! –

+0

Johannes! Поскольку этого текстового поля комментариев недостаточно, чтобы распечатать выход журнала procmail, я дал результат как ОТВЕТ. –

5

log excerpt четко заявляет, что ваш скрипт выполнен, даже если он не показывает желаемого эффекта. Я ожидаю, что procmail запустит ошибку, если выполнение завершилось с ошибкой.

В любом случае, убедитесь, что пользователь (uid), с которым выполняется procmail, имеет правильные разрешения для выполнения вашего скрипта. Провод сценарий в Procmail только если вам удалось испытывать что-то вроде этого (замените «» Procmail с правильной UID):

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

В зависимости от конфигурации SUDO, вы должны запустить это как корень. О, и убедитесь, что вы используете абсолютные пути к файлу.

+0

Awesome paprika! Я попытался запустить сценарий, который вы дали с procmail, замененным на webmail (cur аренда пользователя), мой скрипт был выполнен. Но когда я получаю почту (будь то от кого-либо), мой procmail запускает procmailrc правильно? Итак, кто будет правильным пользователем для запуска скрипта? –

+0

Паприка! Чтобы четко объяснить, мой пользовательский скрипт python получил достаточное количество разрешений (777), но его выполнение не выполняется автоматически, когда я получаю почту –

+1

Чтобы узнать, каким пользователем запускается ваш скрипт procmail, замените строку сценария в procmailrc следующим образом: «|/usr/bin/id -un>/tmp/procmailuser 'Дон' забыть символ трубы впереди! После этого проверьте, что «cat/tmp/procmailuser» должен показать пользователя. – paprika