2013年1月11日金曜日

postfix 設定 その5 メール受信をトリガーにプログラムを起動する

ここでは、メールの受信をトリガーにしてphpプログラムを起動させる設定をしていきます。

プログラムの起動設定は、「/etc/aliases」に直接指定する方法と任意のファイルをincludeさせてその中で指定する方法の2つありますので、順に設定方法を見ていきます。

一.「/etc/aliases」に直接指定する方法
まずは「/etc/aliases」のみの編集で出来る方で設定してみます。

①「/etc/aliases」の編集。
「/etc/aliases」を編集します。
$ vi /etc/aliases

↓設定内容
#メール受信時のトリガー設定
yamada: "| /usr/bin/php -f /tmp/test.php"
『「:」の前に記載されたユーザー宛てにメールが来た場合は「:」の後ろに書かれた処理を行う』
というルールで設定を記述します。
上記の場合は
『ユーザー「yamada」宛てにメールが来た場合、「|」でメール内容を渡しつつ「/tmp/test.php」というphpプログラムを起動しろ』
という意味になります。
「/etc/aliases」はデフォルトでも既に様々な記述がされていますので、ファイルの最後に追記します。
また#で始まる行はコメントアウトされています。

②phpファイル用意。
①で記載したphpファイル「/tmp/test.php」を用意します。
/tmp/test.php
#!/usr/bin/php -q
<?php

 $mail = file_get_contents("php://stdin");

 $sFileName = "/tmp/test.txt";
 $fp = fopen($sFileName,"a+");
 fputs($fp, date("Y/m/d H:i:s") . "【" . "メール受信時のphp起動テスト" . "】" . "\n");
 fputs($fp, $mail . "\n");
 fclose($fp);

?>
『date("Y/m/d H:i:s")』の出力時間でメール受信を後にphpプログラムが起動している事を確認します。
また①で「|」を挟んでphpを起動しているので、メール内容が標準入力として渡されている事を
 $mail = file_get_contents("php://stdin");
の部分で取得しファイルに出力する事で確認します。
(メール内容は文字列としては複雑なためプログラムで処理しやすくするクラスがあり実用の際はそちらを使う方が便利ですが、今回は起動の確認のため内容を丸ごと取得し表示するだけにします)

③「/etc/aliases」を変更したのでエイリアス、postfixをそれぞれ読み込みなおします。
$ newaliases
$ /etc/init.d/postfix reload

また、この時点での「/etc/aliases」内容は下記になります。
以上で、まず「/etc/aliases」に直接指定するトリガー設定は完了です。
「yamada@aaaa.com」にメールを送信してみてください。
プログラム内で情報を出力している「/tmp/test.txt」に送信したメールの内容が書かれていれば、設定は成功です。
うまく実行されない場合は
「/tmp/test.php」に実行権限がない可能性がありますので、確認してみてください。

二.任意のファイルをincludeさせてその中で指定する方法
「/etc/aliases」には読み込むファイル名だけを記述し、include先のファイルに行う命令を記載する事もできます。
こちらの設定だと一.と違い2ファイル設定を記述しないといけませんが、
起動する処理を変更したい時も「/etc/aliases」を変更する必要はなくなります。

①「/etc/aliases」を編集。
#yamada: "| /usr/bin/php -f /tmp/test.php"
yamada: :include:/tmp/TEST
上記の場合は
『ユーザー「yamada」宛てにメールが来た場合「/tmp/TEST」を読み込め』
という設定になります。
#はコメントアウトです。
一.で設定した「yamada: "| /usr/bin/php -f /tmp/test.php"」はこれからする設定と重複しますのでコメントアウトしておきます。

②「/tmp/TEST」の作成。
①で読み込み先に指定したファイル「/tmp/TEST」を作成します。
$ vi /tmp/TEST
↓記述内容
"| /usr/bin/php -f /tmp/test.php"
ここでは一.で「/etc/aliases」で設定していた内容と全く同じ記述を記載し、保存します。

③「/etc/postfix/main.cf」の編集。
「/etc/postfix/main.cf」に下記項目を追加します。
# Allowed to run :include: method in /etc/aliases
allow_mail_to_commands = alias, forward, include
これはincludeを利用可能にする設定の記述になります。

④「/etc/aliases」「/etc/postfix/main.cf」を変更したので,エイリアス、postfixをそれぞれ読み込みなおします。
$ newaliases
$ /etc/init.d/postfix reload
また、この時点での「/etc/aliases」「/etc/postfix/main.cf」内容はそれぞれ下記になります。
以上で、include設定は完了です。
改めて「yamada@aaaa.com」にメールを送信してみてください。
一.の時と同じようにプログラム内で情報を出力している「/tmp/test.txt」に送信したメールの内容が書かれていれば、設定は成功です。


本項目は下記ページを参考にさせて頂きました。
http://www.plustar.jp/lab/blog/?p=9303

0 件のコメント:

コメントを投稿