Хотите, чтобы 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. О, и убедитесь, что вы используете абсолютные пути к файлам.