[php]メール送信をログする

2017-02-07


メール送信のテストってそこそこ厄介です。

お客さんのメールアドレスに送っちゃったりとか、そもそもメールサーバの設定をしないといけないとか。
dockerなんかで組んでるとそもそもメールサーバを立てないといけなかったりとか。
契約しているプロバイダによっては自前のメールサーバは拒否られたり=OP25B問題とかとか。

そんな時、実際に送信できるかどうかはさておいて、とりあえずmb_send_mailとか呼び出したら、
どんな内容が送信されるのか確認だけできれば!なんて場合に今回の方法はどうでしょう?

メールを実際に送信するのではなく、ログに吐き出す方法です。

こんな感じのスクリプトを使います。

if [ -p /dev/stdin ] ; then
    cat - | iconv -f ISO-2022-JP -t UTF-8 >> /var/log/phpmail.log
fi

phpからsendmailコマンドへは標準入力でメール内容が渡されます。
さらにメールはISO-2022-JPの文字コードなのでiconvで変換、それをリダイレクトで出力する寸法。

この例だと/var/log/phpmail.logに↓のようなログが保存されます。

To: hogehoge@hogehoge.com
Subject: test
X-PHP-Originating-Script: 0:mailtest.php
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

テスト

後はdateコマンドなんかで時間も一緒に保存してやるとさらにいい感じです。

引数で渡されると思い、$*の中身を出力→何もでない!?で悩んでたのもいい思い出。