-1

Debian Sid、Sid の最新のポストフィックス。

ユーザーがメールを受け取った後、bash スクリプトを呼び出す必要があります。だから、私がしたこと:

  • ファイル /etc/postfix/transport を作成します。例: mail@domain.com myscript

  • コマンドを実行してデータベースを作成します: postmap transport

  • main.cf に追加: transport_maps = hash:/etc/postfix/transport

  • master.cf に追加: myscript unix - nn - - pipe user=michal flags=FR argv=/home/michal/test.sh

  • ポストフィックスをリロードする

どうしたの?このように設定すると、メール受信後にスクリプト「test.sh」が実行されますが、受信メールはメールボックスに配信されず、受信後すぐに削除されます。

では、これを回避するにはどうすればよいでしょうか。スクリプトを実行する必要がありますが、受信メールもメールボックスに配信する必要があります。

4

1 に答える 1

1

Procmail を使用します。

:0c
| $HOME/test.sh

スクリプトは標準入力で完全なメッセージを受け取りますが、メッセージを自分で解析したくない場合は、ヘッダー値を Procmail 変数に抽出する標準的な手法があります。次の場所にパイプできますformail

SUBJECT=`formail -zcxSubject:`

または、外部プロセスの生成を回避する MATCH にグラブすることもできますが、より複雑なタスクには少し注意が必要です。

:0
* ^Subject:[  ]*\/.+
{ SUBJECT=$MATCH }

([ ] 内の空白はスペースとタブにする必要があります); どちらの方法でも、コマンド ライン$SUBJECTでパラメーターとして渡すことができるようになりました。test.sh明らかに、他のヘッダー値も同様の方法で変数に抽出できます。

PS。パイプからの標準入力を消費するため、このように formail 呼び出しをインライン化することはできません。

:0c
| $HOME/test.sh "`formail -zcxSubject:`"   # erroneous!

代わりに、次のように分割する必要があります。

:0
* ^Subject:[  ]*\/.+
{ SUBJECT=$MATCH }
:0c
| $HOME/test.sh "$SUBJECT"
于 2012-07-28T15:18:18.543 に答える