XAMPPでメールをテキストファイルに保存する方法

2021/04/02 00:00:00

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" フォルダーにあります。

mailtodisk.png

設定方法

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.png

セキュリティ制限

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

ちなみに、実際に 300MB 超えるとどうなるかと言えば、 mailoutput フォルダーに "MAILTODISK_WRITE_RESTRICTION_FOLDER_MORE_THEN_300_MB.txt" というファイルが生成され、 それ以降のメールは mailoutput フォルダーに出力されなくなります。

security_limit.png

参考サイト

関連記事

記事検索

アーカイブ

2021

2019

2018

2017

2016

2015

2014

2013

2012

2011

2010

RSSフィード