しかしメールはちょっと不便ですよね。まず気がつきません!
リアルタイムに把握したい場合は、流行のslackが便利です。
slackについての説明や設定ははしょって、通知を飛ばす方法を紹介します。
Tracの通知メールはCCでいくつでも設定できるので、slack用メアドへ通知を送り、それをプログラムへ転送してslackへメール内容を送るという方法になります。
pythonの古い仕様のソースはgithubに上がってますが、そのままでは使えないしPHPが好きだしということで、PHPでの方法です。
メール転送は、ユーザディレクトリに「.forward」ファイルを設置し、この中に転送先を書きます。
とりあえず、「slack」というlinuxユーザを作って説明していきます。
ホームディレクトリありでslackユーザを作成すると
/home/slack ディレクトリが作られます。
/home/slack/.forward ファイルを作って
中身は
"|php slack.php"
とでもしておきましょう。
「|」がコマンド実行するよーという合図で
「php」がコマンド
「slack.php」が、コマンドに渡すパラメータで、まぁ、これを実行するわけですね。
ここから先はサーバ設定によってまったく異なりますのでご注意。
.forward で指定できる内容は、セキュリティー設定によりかなり制限されます。
・指定されたディレクトリに存在するコマンドしか使えない。
・コマンドのパス部分は無視され、ファイル名部分だけ認識。
・絶対パスは使えない。
|php /home/slack/slack.php と書いたら駄目です。 必ず相対パス。
以上3点がはまりやすいかもしれません。
phpコマンドを使えるように、設置
/etc/smrsh/ にあるコマンドのみ使えるので
# ln -s /usr/bin/php /etc/smrsh/シンボリックリンクを置きます。
これで php コマンドが使えます。
次に、slackへメール転送するphpである slack.php。
<?php require_once 'mimeDecode.php'; $WebHookURL = 'https://hooks.slack.com/services/xxxxxxx/xxxxxxx/xxxxxxxxxx'; $param = array( 'channel' => '#channel', 'username' => 'username', 'icon_emoji' => ':vertical_traffic_light:', 'text' => '', 'color' => '#cccccc', ); $decoder = new Mail_mimeDecode(file_get_contents("php://stdin")); $params = array("include_bodies"=>true); $structure = $decoder->decode($params); $param['text'] = $structure->body; postRequest($WebHookURL, $param); function postRequest($url, $param) { $content = json_encode($param); $headers = array( "Content-Type: application/json", "Accept: application/json", "Content-Length: ".strlen($content), ); $options = array('http' => array( 'method' => 'POST', 'content' => $content, 'header' => implode("\r\n", $headers), )); $contents = file_get_contents($url, false, stream_context_create($options)); return $contents; }
こんな感じで適当につくりましょう。
mimeDecode.phpはpearのです。slack.phpと一緒に置いてください。
動かない時は、.forwardのセキュリティーが非常に宜しいです。
.forwardのオーナーをslackにし、パーミッションを600にしてみましょう。
これで動かないサーバは無いと思います。
最後のphpの中身を少し解説
Mail_mimeDecode:pearライブラリで、メール内容をヘッダ、タイトル、本文、添付ファイルと分けてくれる便利な物です。
メールを読み込んでいる部分は file_get_contents("php://stdin")
file_get_contentsは外部と通信するための万能ツールです。slackへの送信もこれで。