ローカル開発環境【XAMPP】でメール送信テストをするふたつの方法

2024年3月11日

ローカル開発環境【XAMPP】でメール送信テストをするふたつの方法

phpでプログラムを作っていると、メール送信が必要な場合がでてきます。例えば、会員登録のプログラムを構築する場合、
1,申請者にメールアドレスを入力してもらう。
2,そのメールアドレスに仮登録用のアドレスを記載したメールを送信する。
3,申請者がログイン名やパスワードなどを入力して本登録が完了したら、その旨をメールで通知する。
といった流れになるかと思います。この場合は2回メール送信をすることになります。

また、データ更新やエラーが発生した場合に管理者に通知するプログラムを構築する場合にも、メール送信テストは欠かせません。

それ以外にも、ローカル環境でWordpressなどのCMSを試用している場合など、メール送信テストができた方がいい場合があります。

開発環境にXAMPPを使っている方は多いかと思います。このページでは、ローカル開発環境XAMPPでメール送信テストを行うふたつの方法を解説します。

ひとつは「mailtodisk」を使って実際にはメール送信を行わず、メールの内容をテキストファイルとして特定のフォルダに保存する方法で、もうひとつは「sendmail」を使って実際にメール送信するものです。

XAMPPでメール送信するためには設定ファイル(php.ini sendmail.ini )を書き換える必要があります。不測の事態に備えてバックアップしておくことをお勧めします。

以下の内容はXAMPPのインストール先が「C:\xampp」として解説しています。異なるフォルダにインストールしている場合には、適宜読み替えてください。

メールをテキストでフォルダに保存する【mailtodisk】

XAMPPでメール送信テストを行うひとつの方法として「mailtodisk」を使う方法があります。「mailtodisk」はその名前の通り実際にメールを送信するのではなく、送信したメールをXAMPPのインストールされているローカルマシンのフォルダにその内容をテキストファイルとして保存するものです。

mailtodiskのインストールの確認

「mailtodisk」がインストールされているか確認します。XAMPPのインストール時にチェックを外していなければデフォルトでインストールされます。インストール先は「C:\xampp\mailtodisk」になります。エクスプローラーなどのファイル管理ソフトでファイルがあるか確認します。

php.ini の設定

php.ini をエディタで開いて、sendmail_path を mailtodiskに設定します。

php.ini はXAMPPをインストールしたフォルダのPHP下にあります。(C:\xampp\php\php.ini )

「;sendmail_path =」のようにコメントアウトしてある場合には「;」を削除します。(sendmail_pathの設定は1,110行あたりにあります。エディタの検索機能を使うと素早くみつけることができます)


; 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" 
;↑ sendmail_path をmailtodisk.exe に設定します 
 

Apache の再起動

php.iniの設定を変更して上書き保存したら、XAMPPのApache を再起動します。

Apacheを停止する
Apacheの停止
Apacheを再起動する
Apacheを再起動する

メール送信のテスト

設定とApacheの再起動ができたら、メール送信のテストをしてみます。

以下にテスト用のサンプルプログラムを載せておきますので、これをコピーしてmail_test.php なのどファイル名で 「C:\xampp\htdocs\」下の適当な場所(例えば、「C:\xampp\htdocs\mail_test\mail_test.php」)に保存し実行してみてください。

ブラウザ上に「メール送信成功」と表示されればその内容がテキスト形式でフォルダに保存されているはずです。

<?php 
//--------------------------------------------------------------------------------
// ローカル開発環境【XAMPP】でメール送信テストをする
// 確認用サンプルプログラム
//--------------------------------------------------------------------------------

// 日本語メール送信の設定
mb_language("ja");
mb_internal_encoding("utf-8");

$Now_Time	= date("Y-m-d H:i");			// 現在の時間 メール本文に挿入します

// 送信先メールアドレス
$to 		= "sample@sample.com";
// タイトル
$subject	= "【XAMPP】でメール送信テスト";
// メール本文
$content	= "
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
これはメール送信のテストです
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

いつもご利用ありがとうございます。 
このメールは $Now_Time にテスト送信されました。

―――――――――――――――――――――――――――――― 
 ピーマンブラザーズの日常
 ◇URL:https://dailylife.pman-bros.com/
 ―――――――――――――――――――――――――――――― 
";

// From:送信元のメールアドレス
$mailfrom = "From:webmaster@sample.jp"; 


// メール送信処理
$result = mb_send_mail($to,$subject,$content,$mailfrom);
 
// メール送信処理結果出力
if($result){
	echo "メール送信成功";
}else{
	echo "メール送信失敗";
}

?>

メールの出力先

mailtodisk を使ってメール送信した場合の出力先は 「C:\xampp\mailoutput\」となり、メール内容がテキスト形式で保存されます。

mailtodiskの送信されたメールの保存
送信されたメールはテキストファイルとして保存される

メール(テキスト)の保存容量について

「C:\xampp\mailtodisk\」下にある「README.txt」には、

Securtity Restriction

If the mail output folder have more then 300 MB overall size mailToDisk do not write in anymore. We want prevent a full disk crash here. Then please clean up this folder.

とあります。

セキュリティ制限
メール出力フォルダー「C:\xampp\mailoutput\」の全体サイズが 300 MB を超えると、ディスク容量を圧迫しないようにmailTo Disk はそれ以上は書き込みません。 メール(テキスト形式)が溜まってきたら必要のなくなったファイルはこまめに削除した方がよさそうです。

メールサーバーを利用して実際にメールを送信する【sendmail】

XAMPPはメールサーバーを持っていません。ですので実際にメール送信する場合には、ご自身で契約しているメールサーバーを利用することになります。難しい設定が必要かというとそうでもなく、メールソフトでアカウント設定した内容を設定ファイルに書き込むだけです。

sendmailのインストールの確認

「sendmail」の場合も「meiltodisk」同様、XAMPPのインストール時にチェックを外していなければデフォルトでインストールされているはずです。

sendmailがインストールされているか確認する
sendmailがインストールされているか確認する

php.ini の設定

「meiltodisk」の設定では、sendmail_path をmailtodisk.exe に設定しましたが、「sendmail」ではこの部分をsendmail.exeに設定します。


; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; https://php.net/sendmail-path
sendmail_path ="C:\xampp\sendmail\sendmail.exe -t -i"
;↑ sendmail_path をsendmail.exe に設定します
 

sendmail.iniの設定

続いて「sendmail.ini」の編集をします。「sendmail.ini」は「C:\xampp\sendmail\」下にあります。エディタで開いて、以下の個所にご自分のメールサーバーの情報を入力して上書き保存します。情報はメールソフトでメールアカウント設定するものと同じになります。


[sendmail]
smtp_server=sample.com
smtp_port=465
smtp_ssl=auto
auth_username=sample@sample.com
auth_password=PassWord
force_sender=sample@sample.com
 

Apache の再起動

meiltodiskの時と同様、設定ファイルを上書き保存したらXAMPPのApache を再起動します。

メール送信のテスト

設定とApacheの再起動ができたら、メール送信のテストをします。

以下にテスト用のサンプルプログラムを載せておきます。「meiltodisk」の時と違うのは、送信先メールアドレスに実際のメールアドレスを指定している点です。

phpを実行してブラウザ上に送信成功と表示され、指定したメールアドレスにメールが届いていれば成功です。

<?php 
//--------------------------------------------------------------------------------
// ローカル開発環境【XAMPP】でメール送信テストをする(sendmail)
// 確認用サンプルプログラム
//--------------------------------------------------------------------------------

// 日本語メール送信の設定
mb_language("ja");
mb_internal_encoding("utf-8");

$Now_Time	= date("Y-m-d H:i");			// 現在の時間 メール本文に挿入します

// 送信先メールアドレス(実際のメールアドレスを入力します)
$to 		= "hogehoge@sample.com";
// タイトル
$subject	= "【XAMPP】でメール送信テスト";
// メール本文
$content	= "
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
これはメール送信のテストです【sendmail編】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

いつもご利用ありがとうございます。 
このメールは $Now_Time にテスト送信されました。

―――――――――――――――――――――――――――――― 
 ピーマンブラザーズの日常
 ◇URL:https://dailylife.pman-bros.com/
 ―――――――――――――――――――――――――――――― 
";

// From:送信元のメールアドレス
$mailfrom = "From:webmaster@sample.jp"; 


// メール送信処理
$result = mb_send_mail($to,$subject,$content,$mailfrom);
 
// メール送信処理結果出力
if($result){
	echo "メール送信成功";
}else{
	echo "メール送信失敗";
}

?>
メールが届けば成功
Antonios NtoumasによるPixabayからの画像

PC-Life,PHP

Posted by pman-bros