とりあえず本番でエラーが起きてたら開発MLへメールしたい。レガシーPHP案件にとりかかる時はいつもやるphp.iniでメール飛ばす設定をしようとしたら、CakePHPがエラーを捕まえているので飛ばない。

大抵のフレームワークではググるとMailを飛ばすLoggerが見つかるもんだが、CakePHP1.3用のが見つからなかったので書いときました。

<?php
/**
 * メールを送るロガー
 *
 * 使い方:
 * // app/config/bootstrup.php:
 * CakeLog::config('mailLog', array(
 *     'engine' => 'MailLog',
 *     'to'     => 'to@example.com',
 *     'from'   => 'from@example.com'
 * ));
 */
class MailLog
{
    private $to;
    private $from;

    /**
     * オプションを設定する
     *
     * @param  array $options メールのto、fromの設定
     * @return void
     */
    public function __construct($options = array())
    {
        if (isset($options['to'])) {
            $this->to = $options['to'];
        }

        if (isset($options['from'])) {
            $this->from = $options['from'];
        }
    }

    /**
     * ログをメールで送る(ログを書く)
     *
     * @param  string $type    エラーの種類
     * @param  string $message エラーの内容
     * @return void
     */
    public function write($type, $message)
    {
        $subject = "[{$type}] ".mb_substr($message, 0, 32);
        mb_send_mail($this->to, $subject, $message, "From: {$this->from}");
    }
}

Sending log by mail for CakePHP1.3 — Gist

Comments


Option