10

私は 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として意味しますか????
4

2 に答える 2

11

( ) のfw後に入れるだけで結構です。Python プログラムは でメールを受信します。に変換された可能性のあるメールを「エコー」する必要があります。:0:0 fwstdinstdout

fw意味:

  • fパイプをフィルターと考えてください。
  • wフィルターまたはプログラムが終了するのを待ち、その終了コードを確認します (通常は無視されます)。フィルターが失敗した場合、テキストはフィルター処理されません。

私の SPAM チェッカー (bogofilter) はそのように機能します。ヘッダーを追加し、後で procmail-rules がこれらのヘッダーに応じて何かを行います。

于 2009-02-17T17:45:04.123 に答える
5

ログの抜粋には、目的の効果が示されていない場合でも、スクリプトが実行されたことが明確に示されています。実行が失敗した場合、procmailはエラーをログに記録すると思います。

とにかく、procmailが実行されるユーザー(uid)がスクリプトを実行するための正しい権限を持っていることを確認してください。次のようなテストに成功した場合にのみ、スクリプトを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として実行する必要があります。ああ、絶対ファイルパスを使用していることを確認してください。

于 2009-02-18T14:01:22.093 に答える