Хотите, чтобы procmail запускал собственный скрипт Python, каждый раз, когда появляется новое письмо - PullRequest
10 голосов
/ 17 февраля 2009

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 17 февраля 2009

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

fw означает:

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

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

5 голосов
/ 18 февраля 2009

В логе четко указано, что ваш скрипт выполняется, даже если он не показывает желаемого эффекта. Я ожидаю, что 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, вам придется запускать это как root. Да, и убедитесь, что вы используете абсолютные пути к файлам.

...