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 に置いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $to = "wakaba@test.com"; $sub = "テストメールについて"; $body = "テストメールを送ってみます。\n" . "送信日時は " . date("Y/m/d H:i:s") . " です。\n"; $myadr = "info@test.com"; $header = "From: $myadr\nReply-To: $myadr\n"; $f_success = mb_send_mail($to, $sub, $body, $header); ?> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <?php if ($f_success) : ?> <p>メールを送信しました。</p> <?php else: ?> <p>メールを送信に失敗しました。</p> <?php endif; ?> <p>題名: <?php echo $sub ?></p> <p>宛先: <?php echo $to ?></p> </body> </html> |
テストコードの説明
基本的には、
前半でメールの送信、
後半でhtmlに結果報告
をしています。
mb_language, mb_internal_codingの関数で、内部文字の設定を行ってます。
マルチバイト文字でメール送信するため、mb_send_mail 関数を使います。
mb_send_mail関数の説明
mb_send_mail関数は、mail関数のラッパー(マルチバイトに必要な処理を追加して内部でmail関数をコールしている関数)になってます。
関数の引数と戻り値
1 |
bool mb_send_mail(string $to, string $subject, string $message, string $additional_header) |
引数
$to: 送信先のメールアドレス。カンマ区切りで複数指定可能
$subject: メール件名
$message: メール本文
$additional_header: 追加のメールヘッダー。Fromは必須です。複数指定する場合は改行で区切ります。
戻り値
成功したらtrue、失敗したら false を返します。
送信
にアクセスするとメール送信と結果表示を行います。
このアドレスは、バーチャルホストの設定によって違いますので、自分の環境に合わせて読み替えてください。
エラーが出なければ下図のような感じで表示されます。
送信されたメールの確認
Fake Sendmailを使用している場合、送信したメールは、実際には送られず、 c:\xampp\mailoutput フォルダに保存されます。
1通1ファイルで保存されます。
ファイルを開くと下図のようになっており、From、Reply-To のヘッダも含んめて、ちゃんと送信されていることが確認できます。
まとめ
WindowsにてXAMPPでウェブサイト開発を行う際、Fake Sendmailを使ってPHPで送信されたメールの確認をする方法を説明しました。
実際に送信することなくウェブサイトのメール送信機能を開発・デバッグできるのでかなり便利です。
今回の方法では、Subjectがエンコードされていて読めません。しかし、PHPでは、「iconv_mime_decode」という関数でデコードすることができます。
この関数を使って件名を表示する方法別記事で紹介しますので、確認してみてくださいね。
コメント