Хотите, чтобы procmail запускал собственный python script, каждый раз, когда появляется новое сообщение

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

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

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

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

Ответ 1

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

fw означает:

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

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

Ответ 2

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

Во всяком случае, убедитесь, что пользователь (uid), с которым выполняется procmail, имеет правильные разрешения для выполнения вашего script. Подключите script к 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 вам придется запускать ее как root. О, и убедитесь, что вы используете абсолютные пути к файлам.