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

参考サイト
関連記事
記事検索
アーカイブ
2021
-
XAMPPでメールをテキストファイルに保存する方法(04/02)
NEW
-
Windows サンドボックス(その2:構成ファイル)(03/29)
NEW
-
Windows サンドボックス(03/28)
NEW
-
Composer 再入門(その4:便利コマンド)(03/21)
NEW
-
Composer 再入門(その3:オートローダーの最適化)(03/20)
NEW
-
Composer 再入門(その2:スクリプト)(03/19)
NEW
-
Composer 再入門(03/18)
NEW
2019
-
XAMPP に Redis をインストールする方法(01/20)
2018
-
セマンティック バージョニング(04/05)
-
Node.js と npm 再入門(その4:便利コマンド)(03/30)
-
Node.js と npm 再入門(その3:npm-scripts)(03/30)
-
Node.js と npm 再入門(その2:パッケージの更新)(03/29)
2017
-
Node.js と npm 再入門(12/24)
2016
2015
2014
-
Ajaxでポップアップブロックを回避する方法(01/06)
2013
-
JavaScriptファイルに動的にパラメータを渡す方法(11/24)
2012
-
XAMPPでMySQL接続がやたらと遅い件(09/26)