XAMPP でメールをテキストファイルに保存する方法
XAMPP で開発する際に、PHP のメール送信関数 mail()
もしくは mb_send_mail()
を使うと、エラーが出てしまい困ることがあります。
ちゃんとメールサーバーの設定をすれば良いじゃないかと思うかもですが、
メールサーバーを用意するのは面倒ですし、実際にメールが外部に送信されてしまってもそれはそれで困りものです。
mailtodisk とは?
mailtodisk は sendmail のように振舞いながら、実際にはメールを送信せず、メールの内容をテキストファイルで保存してくれるというものです。 これを使うと、PHP のメール送信関数を呼んだ際のエラーが出なくなりますし、メールも外部には送信されませんし、メールの内容も確認することができます。 何より設定が楽です。 ちなみに XAMPP にオプションでインストールすることができる Fake Sendmail("C:\xampp\sendmail\sendmail.exe") とは別物なので注意。
インストール方法
XAMPP で Apache と PHP をインストールしたらデフォルトで入ってます。 なので、XAMPP をインストールしてあるなら、特に何もしなくても入ってると思います。 XAMPP のインストール先が "C:\xampp" の場合は、"C:\xampp\mailtodisk" フォルダーにあります。

設定方法
PHP のメール送信関数 mail()
もしくは mb_send_mail()
が呼ばれたら、 mailtodisk にメールが送られるように設定します。
php.ini の sendmail_path を mailtodisk.exe に設定し、Apache を再起動します。
; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"
出力先
mailtodisk は、実行した場所のフォルダーの配下に mailoutput フォルダーを作成し、そのフォルダーの中にファイルを出力します。
Apache の PHP からメールを送信した場合(つまり HTTP / HTTPS から実行した場合)は、出力先のフォルダーは "C:\xampp\mailoutput" になります。
CLI の PHP(例えばバッチファイル)からメールを送信した場合は、実行したそのフォルダー配下の mailoutput フォルダーになります。 保存されてないなと思ったら、別のフォルダーに保存されていたということが良くあるので注意。

セキュリティ制限
メールの出力先 mailoutput フォルダーの容量は 300MB までに制限されます。 これは mailtodisk がストレージ(HDD / SSD 等)の容量を使い果たさないようにするためのセキュリティ上の制限となります。 あまり無いとは思いますが、mailoutput フォルダーの容量が 300MB を超えそうなら、不要なファイルを削除して容量を減らしましょう。
ちなみに、実際に 300MB 超えるとどうなるかと言えば、 mailoutput フォルダーに "MAILTODISK_WRITE_RESTRICTION_FOLDER_MORE_THEN_300_MB.txt" というファイルが生成され、 それ以降のメールは mailoutput フォルダーに出力されなくなります。
