開発したアプリなど一覧

Postfix で受信したメールから CakePHP でバッチ処理を行う

メール受信してなんかやろうと思ったので作業メモ。

メールサーバでメールを受信したら 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 としてメールの内容が保存されます。実行権限を付けるのを忘れずに。

Sponsored Link

コメント