Postfixは、指定されたアドレスのメールを受信したときに、shellスクリプトを起動します.


もっと読む
プロジェクトの中で一つの問題にぶつかると、テーマの中で言及された問題です.中国語の説明文がないようなので、英語の文章を探して了解しました.リンクは以下の通りですhttp://blog.thecodingmachine.com/content/triggering-php-script-when-your-postfix-server-receives-mailもし私が書いた文字はどこが分かりにくいですか?英語の原版を参照してください.
以下は私が個人的に理解した上で整理しましたので、ご指摘ください.(元の記事はPHPスクリプトの呼び出しをトリガしました.ここでSheelスクリプトに変更します.)
1.開く  master.cf 次の行のテキストを追加します.
myhook unix - n n - - pipe
  flags=F user=www-data argv=/path/to/postfix.sh ${sender} ${size} ${recipient}
ここでfilter(フィルタ)を作成します.別名myhookはパイプライン(pipe)モードです.この点に注意してください.設定が成功すると、メールは直接標準入力でargv指定のスクリプトに転送されます.
また、userについて説明します.このユーザーはrootを試しました.エラーです.postfixとpostfixグループのユーザー、エラー!原因を調べる時間がない.ユーザーを新たに作って、ユーザーグループを設定していませんでしたが、実行に成功しました.えっと、悲劇.ここは分かりません.原因を知っていてください.後のパラメータもありますが、pipeはたくさんあります.この三つは元の文章から与えられたものです.私は変わっていません.直接使いました.私たちの脚本の処理も必要ないようです.
2.変更を続ける master.cf 次のテキストを見つけます.
smtp      inet  n       -       -       -       -       smtpd
追加
 -o content_filter=myhook:dummy
smatpで受信したメールをfilterに転送するという意味です.
テキストの内容をもう一度探してください.
pickup    fifo  n       -       -       60      1       pickup
同じ内容を追加します.
 -o content_filter=myhook:dummy
上と同じように、ここではコマンドラインsendmailのメールをfilteに転送します.必要でなければ入れなくてもいいです.
ここに来たらreload postfixをします.
postfix reload
shellが用意されているなら、直接テストしてもいいです.任意のメールが届いたかどうかを見て、デフォルトでshellを呼び出します.実を言うと、私は試したことがありません.一気に配置します.
3.shell受信スクリプトを与える
ヽbin/sh
MAILDIR=/home/maltest 2/MAILDIR/new/
FILENAME="
email="
while read line;ド
    email+=$LINE"""
done
echo-e$email>/home/postfix/postfix.logs
DATE=`date+“%Y%m%H%M%S”`.
皰echo${1}+{DATE}/home/postfix/postfix.logs
4.下にフィルタを指定します.
見つけました access をクリックして、新しいものはありません.下記の内容を追加します.
[email protected] FILTER myhook:dummy
もちろん、受取人の住所は自由に指定できます.ここは例です.
動くな,まだ人が話しているのだから. access ファイルはHash化されなければなりませんので、コマンドラインを実行します.
postmap /etc/postfix/access
上の命令です.経路は自分で確認して、修正できます.
 
5.最後に正しいのを確認します. access  の参照を追加します メール. にあります
ファイルにkeyが存在する場合
smatpd_recipient_レジスタンス 
key値の先頭に追加
checkrecipient_access hash:/etc/postfix/access
key値が存在しない場合は、直接に下記の内容を追加します.
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/access, permit_mynetworks, reject_unauth_destination
 
後を追う postfix reload
試してみてください.フィルタリングを定義するメールボックスにメールを送ると、shellを起動して指定されたディレクトリにファイルを出力できますか?
えっと、ところで、Postfixは直接に入力をパイプ(pipe)標準入力でスクリプトに転送しましたので、postfixの受信フォルダの下ではメールファイルは生成されません.
 
以下はテスト後の問題に対する修正です.
これは上の第2ステップに対して、特定のアドレスに対してフィルタを起動する必要がある場合、このステップを削除して追加します. master.cfの内容.この設定内容は、すべてのsmatpとpickup方式で送信されるメールに対して、postfixに受信された後に特定のスクリプト処理を開始するためです.第1ステップの設定後、直接に第4ステップの設定にジャンプすればいいです.