出張版『確かな力が身につくPHP「超」入門』 入力フォームからメールを送信するPHPスクリプトの書き方

2016.10.14
INFORMATICS

2016年9月刊行の書籍『確かな力が身につくPHP「超」入門』から、ページボリュームの関係で未掲載とさせていただいた原稿をここで掲載させていただきます。

ここでは、Webページ上の入力フォームからメール送信を行うPHPスクリプトの書き方を紹介します。題名・差出人・宛先・本文を入力して、サポートに問い合わせのメールを送信する機能などを実現することができます。php01

△フォーム画面で入力された内容をメールで送信できるようになります。

 

■Step1 PHPスクリプトを動かす準備

PHPスクリプトの作成と実行のための環境として「XAMPP」を利用します。ダウンロードとインストールを行ったのち、XAMPPコントロールパネルから「Apache」を起動しておきましょう。インストール先のフォルダ等は、デフォルトのままとします。php02

△Apacheの[Start]ボタンを選択して起動します。

 

PHPスクリプトや実行に必要なその他のファイルは、「c:¥xampp¥htdocs」以下に「php」フォルダを作成して、そのなかに保存するものとします(Windowsの場合)。Mac OS Xの場合は、「Applications」フォルダ以下にある「XAMPP/htdocs」に「php」フォルダを作成します。

開発環境の準備については、『確かな力が身につくPHP「超」入門』のChapter2にて、詳しい解説を行っています。

■Step2 php.iniを設定する

メールを送信するためには、いくつかの設定ファイルを記述する必要があります。本記事では、Windows上でXAMPPを利用する場合の設定方法を解説します。Mac OS Xなど他の環境については、相違点を紹介します。

まずはPHPの設定ファイルから設定を行いましょう。ここでは、メールを送信するソフトウェアを指定します。

「c:¥xampp¥php」フォルダに「php.ini」というファイルがあります(XAMPPをデフォルトでインストールした場合)。このファイルをテキストエディタで開いてください。そして、以下の行を見つけてください。テキストエディタの検索機能を使うと便利です。

;sendmail_path =

上記の行を、以下のように変更してください。

sendmail_path = "c:¥xampp¥sendmail¥sendmail.exe"

「sendmail.exe」は、XAMPPに同梱されている「fake sendmail for bugzilla/windows」の実行ファイルです。sendmailはLinux等のUNIX系OSで一般的なメール送信ソフトウェアです。このsendmail.exeは、sendmailを模したWindows用のソフトウェアです。

変更後のphp.iniを上書き保存します。変更を反映させるために、XAMPPコントロールパネルでApacheを再起動してください。Apacheの右にある[Stop]ボタンを選択した後に、[Start]ボタンを選択します。

php03△[Stop]ボタンで一度Apacheを停止して、再度[Start]ボタンで起動します。

 

Windowsはsendmailを備えていないので、XAMPPに同梱されているsendmail.exeを使いました。WindowsでXAMPPを使わない場合には、sendmailに相当するソフトウェアを用意する必要があります。一方、Mac OS Xや多くのLinuxは、もともとsendmailを備えていますので、それらを使用することができます。

Mac OS Xの場合、sendmailに相当するソフトウェアとして、Postfix(http://www.postfix.org/)が提供されています。Postfixの設定方法については、別途マニュアルなどをご参照ください。また、php.iniファイルは「Applications」フォルダ以下の「XAMPP/etc」にあります。

■Step3 sendmail.iniを設定する

引き続き、WindowsでXAMPPを使う場合の設定を行います。次は、sendmail.exeの設定ファイルです。「c:¥xampp¥sendmail」フォルダにある「sendmail.ini」ファイルを、テキストエディタで開いてください。そして、お手持ちのメールアカウントに合わせて、設定を変更してください。ここで紹介するPHPスクリプトを実行するには、SMTPサーバが利用できるメールアカウントが必要です。

設定が必要な可能性のある項目は以下の通りです。メールアカウントによって、設定が必要な項目が異なります。設定が不要な項目については、変更しなくて構いません。

▽sendmail.iniの設定項目
項目名      内容
smtp_server    SMTPサーバ名
smtp_port     SMTPポート番号
smtp_ssl     SSL使用の有無

以下の項目は、SMTPサーバへのログインが必要な場合に設定します。

▽ログイン設定
項目名      内容
auth_username  SMTPサーバのログイン名
auth_password  SMTPサーバのパスワード

以下の項目は、POP3 before SMTPが必要な場合に設定します。

▽POP3設定
項目名      内容
pop3_server     POP3サーバ名
pop3_username   POP3サーバのログイン名
pop3_password   POP3サーバのパスワード

設定が終わったら、sendmail.iniを上書き保存します。

■Step4 入力用のフォーム画面を作成する

送信するメールを入力するフォーム画面を用意しましょう。以下のようなスクリプトを記述します。ファイル名は「mail-input.php」とします。

スクリプトは、「c:¥xampp¥htdocs¥php」フォルダ以下に、「mail」フォルダを追加して、そのなかに保存するものとします(Windowsの場合)。Mac OS Xの場合は、「Applications」フォルダ以下にある「XAMPP/htdocs/php」フォルダに、「mail」フォルダを追加します。

▽mail-input.php
 <form action="mail-output.php" method="post">
 <p>題名</p>
 <input type="text" name="subject" size="30">
 <p>差出人</p>
 <input type="text" name="from" size="30">
 <p>宛先</p>
 <input type="text" name="to" size="30">
 <p>本文</p>
 <textarea name="message" cols="30" rows="10"></textarea>
 <p><input type="submit" value="送信"></p>
 </form>

スクリプトを実行するには、ブラウザで以下のURLを開きます。

http://localhost/php/mail/mail-input.php

正しく実行できた場合には、題名・差出人・宛先・本文の入力欄と、[送信]ボタンが表示されます。php4
△メールの入力画面が表示されます。

 

題名・差出人・宛先の入力欄は、<input>タグを用いて作成します。name属性はそれぞれ、以下のように設定しています。

・題名 :subject
・差出人:from
・宛先 :to

本文の入力欄は、<textarea>タグを用いて、複数行のテキストボックスを作成します。name属性は「message」としました。

■Step5 メールの送信処理を作成する

入力画面で入力したメールを送信しましょう。以下のようなスクリプトを記述します。ファイル名は「mail-output.php」です。入力画面用のスクリプトと同様に、「c:¥xampp¥htdocs¥php¥mail」フォルダに保存するものとします(Windowsの場合)。Mac OS Xの場合は、「Applications」フォルダ以下にある「XAMPP/htdocs/php/mail」フォルダに保存します。

なお、終了タグ「?>」は省略可能です。ここではPHPスクリプトの末尾を明確にするために残してあります。

▽mail-output.php
 <?php
 if (mb_send_mail($_REQUEST['to'], $_REQUEST['subject'],
     $_REQUEST['message'], 'From:'.$_REQUEST['from'])) {
     echo "メールの送信に成功しました。";
 } else {
     echo "メールの送信に失敗しました。";
 }
 ?>

プログラムを実行するには、入力画面において題名・差出人・宛先・本文を入力します。結果が確認しやすいように、差出人と宛先は自分にするとよいでしょう(差出人と宛先は有効なメールアドレスを入力してください)。

[送信]ボタンを選択すると、メールが送信されます。送信に成功すると、「メールの送信に成功しました」というメッセージが表示されます。

メールの送信に失敗した、というメッセージが表示された場合には、php.iniやsendmail.iniで行ったメールの設定を確認し、修正してください(Windowsの場合)。php.iniを変更した場合には、Apacheの再起動が必要です。Mac OS Xの場合には、Postfixの設定を確認してください。

■解説 mb_send_mail関数

メールの送信は、mb_send_mail関数で行います。引数は次の通りです。

mb_send_mail(宛先, 題名, 本文, 付加情報)

付加情報は、メールのヘッダにFrom、Cc、Bccを追加するために使います。今回は差出人(From)を追加するために利用しています。

送信処理のスクリプトでは、入力画面で入力した内容を、リクエストパラメータから取得し、mb_send_mail関数に渡します。

mb_send_mail($_REQUEST['to'], $_REQUEST['subject'], $_REQUEST['message'], 'From:'.$_REQUEST['from'])

付加情報については、差出人の先頭に「From:」という文字列を追加して、付加情報に指定しています。「.」は文字列を連結する演算子です。

'From:'.$_REQUEST['from']

mb_send_mail関数は、成功するとTRUE、失敗するとFALSEを返します。ここではif文と組み合わせて、メッセージを表示しています。

 

php

確かな力が身につくPHP「超」入門』では、言語構文の基礎から、ショッピングサイト等の制作にそのまま使える便利なサンプル、データベース処理を詳しく解説しています。書店で目にされた際には、是非お手にとって確認してみてください。