【php】mail関数でメールを送らないでファイルに書き出させる
問題
開発やテストのときに、宛先を間違ってメールを送りたくないけど、メールの内容は確認したいし…
どうするのが良い?
答え
phpのmail関数、mb_send_mail関数は、内部的にはsendmailコマンドを使ってメールを送っています(Linuxでは)。
phpinfo() の sendmail_path に「/usr/sbin/sendmail -t -i」などが設定されています。
変更可能な設定項目で、php.ini などで変更してしまえば、メールを送る以外のことをさせることができるということでもあります。
以下のように変更すると、固定のファイルに直近で送ったメールの内容を書き出してくれます。
; いつもはsendmailコマンドの標準入力に渡しているメールの内容を ; catコマンドに渡して、ファイルに出力する sendmail_path =/bin/cat > /tmp/mail.log
以下のようにすれば、1つのファイルにですが、追記追記で送ったメールをすべて書き出せます。
sendmail_path =/bin/cat >> /tmp/mail.log
さらに1メール1ファイルにして、メールソフトで内容も確認できるようにするには、例えば以下のようにするとよいです。
(mktempコマンドで作った一時ファイルに出力していく。出力先は -p で変更可能。ファイル名のルールも変更可能。)
sendmail_path =/bin/cat > `mktemp -p /tmp mail.XXXXXXXX.eml`
phpでメールを送ってみると
php -r "mb_send_mail('test@example.com', 'テストメールの件名', 'メールの本文。メールの本文。メールの本文。', 'From: foo@example.com');"
こうなり、
$ ls -1 /tmp/mail.*.eml /tmp/mail.0yHu4c63.eml /tmp/mail.5YAZGiL2.eml /tmp/mail.cnYE1v5V.eml /tmp/mail.l8G9nALr.eml /tmp/mail.pLcdKv7e.eml
ファイルをメールソフトで開くと内容も確認できる。
メルマガ送信のテストや、システムなどからの自動的なメール送信の検証などに、実際にメールとして送信しなくても動作が確認できてよいでしょう。
コメント