しかしメールはちょっと不便ですよね。まず気がつきません!
リアルタイムに把握したい場合は、流行の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への送信もこれで。