メール受信してなんかやろうと思ったので作業メモ。
メールサーバでメールを受信したら CakePHP のバッチ処理を実行する様にします。
以下のページを参考にしました。ありがとうございます。
CakePHP 1.2 シェル機能でバッチ処理やコマンドをサーバー側で実行する - Web Tech Log by 1KB
floatingdays: Postfixでメール受信時に PHP等のプログラムを実行する方法
全然どうでもいいけど同じスキン使ってる人初めて見た。
まずメールサーバの設定。Postfixを使用している。
testほげほげ@example.com というような感じのメールを受信した時にスクリプトを実行する様に設定したいので、正規表現を使ってaliasファイルを設定する。
まず /etc/postfix/virtual.alias に以下のように書く。
/^test-/ test
次に /etc/aliases
test: "|/home/user/public_html/example/cakephp/app/vendors/shells/mail_test.sh"
次に上記設定を読む様に postfix の設定を変更する。といってもおそらく /etc/aliases はデフォルトで読み込む様になってるはずなので virtual.aliases だけ。設定ファイルは main.cf だっけな。
virtual_alias_maps = pcre:/etc/postfix/virtual.alias
その後再起動。これでおk
次に CakePHP でバッチ処理用のスクリプトを作成する。
CakePHP でバッチ処理用のスクリプトは app/vendors/shells/ に置く。
<?php
# /home/user/public_html/example/cakephp/app/vendors/shells/mail_test.php
class MailTestShell extends Shell {
var $uses = array('User');
function main() {
$mail_data = file_get_contents('php://stdin');
file_put_contents('/home/user/public_html/example/test.maildata', $mail_data);
}
}
?>
例によってファイル名とクラス名に注意する。CakePHP の他のスクリプト同様、ファイル名は全部小文字+アンダースコアで繋げる、クラス名はキャメルケースで作成。
最後にこれを起動する為のシェルスクリプトを作成する。
もちろん /etc/aliases で指定したファイル名で作成する。今回は
/home/user/public_html/example/cakephp/app/vendors/shells/mail_test.sh
CakePHP でのバッチ処理用ファイルの実行の仕方は
$ cake.php php拡張子が無いファイル名
の様だが例によって Path を設定してなかったので絶対パスで指定した。
#!/bin/sh
php /home/user/public_html/example/cakephp/cake/console/cake.php mail_test
これでメール受信したら test.maildata としてメールの内容が保存されます。実行権限を付けるのを忘れずに。