XAMPPのFake Sendmail を使用したPHPのSendmail 送信テストの方法

シェアする

Windows10に Mysql付きのちょっと古めのXAMPPをインストールしたのですが、Fake Sendmailなる項目があったため、インストールしてみました。

この記事では、PHPでSendmailを使ったメール送信の仕方、ローカル環境で疑似的にメール送信する方法を紹介します。

Fake Sendmailを使えば、実際にメールを送信されてしまうのと違って、Sendmailを使って送信したメールが、ローカルパソコンにファイルとして保存されるため、本番環境と同じプログラムでメール送信までテストできます。

XAMPPのインストール、Fake Sendmail の設定については、記事「Windowsにウェブ開発環境を入れよう:mysql付きXAMPPのインストール手順」で説明していますので、見てみてください。

Fake Sendmail を利用した PHP Sendmail の疑似メール送信テストの方法

Fake Sendmail を利用するための設定について

記事「Windowsにウェブ開発環境を入れよう:mysql付きXAMPPのインストール手順」の復習になりますが、XAMPPのインストール時に「Fake Sendmail」を選択していれば、mailtodisk.exe がインストールされています。

XAMPPインストール時画面

xamppフォルダ内 mailtodiskに実行ファイルがインストールされているmailtodisk.exe

そして、

c:\xampp\php\php.ini に、

sendmail_path=”C:\xampp\mailtodisk\mailtodisk.exe”

と設定しておけば、Sendmail でメール送信した時、メールは実際には送信されず

c:\xampp\mailoutput

フォルダに保存されるようになります。

php.iniのsendmail_path設定箇所

メールが保存されるフォルダ

送信テスト

テスト環境

テスト環境として、Fake Sendmail オプションをつけて XAMPP をインストールしています。
これからのサンプルでは、http://test2 とアクセスして、ローカル環境にアクセスできるようにバーチャルホスト設定しています。

記事「Windows10にXAMPPでサーバー開発。複数のウェブサイトのテスト方法」に設定方法を書いていますので必要に応じて見てくださいね。

テストコード

以下の内容でmail_send.phpというファイル作り、 C:\xampp\htdocs\test\test2  に置いておきます。

テストコードの説明

基本的には、
前半でメールの送信、
後半でhtmlに結果報告
をしています。

mb_language, mb_internal_codingの関数で、内部文字の設定を行ってます。

マルチバイト文字でメール送信するため、mb_send_mail 関数を使います。

mb_send_mail関数の説明

mb_send_mail関数は、mail関数のラッパー(マルチバイトに必要な処理を追加して内部でmail関数をコールしている関数)になってます。

関数の引数と戻り値

引数

$to: 送信先のメールアドレス。カンマ区切りで複数指定可能

$subject: メール件名

$message: メール本文

$additional_header: 追加のメールヘッダー。Fromは必須です。複数指定する場合は改行で区切ります。

戻り値

成功したらtrue、失敗したら false を返します。

送信

http://test2/mail_send.php

にアクセスするとメール送信と結果表示を行います。
このアドレスは、バーチャルホストの設定によって違いますので、自分の環境に合わせて読み替えてください。

エラーが出なければ下図のような感じで表示されます。

送信されたメールの確認

Fake Sendmailを使用している場合、送信したメールは、実際には送られず、 c:\xampp\mailoutput フォルダに保存されます。

1通1ファイルで保存されます。

ファイルを開くと下図のようになっており、From、Reply-To のヘッダも含んめて、ちゃんと送信されていることが確認できます。

まとめ

WindowsにてXAMPPでウェブサイト開発を行う際、Fake Sendmailを使ってPHPで送信されたメールの確認をする方法を説明しました。

実際に送信することなくウェブサイトのメール送信機能を開発・デバッグできるのでかなり便利です。

今回の方法では、Subjectがエンコードされていて読めません。しかし、PHPでは、「iconv_mime_decode」という関数でデコードすることができます。

この関数を使って件名を表示する方法別記事で紹介しますので、確認してみてくださいね。

この記事が気に入ったら
いいね ! しよう