ワークショップ
お問い合わせフォームを作る(3)
自動返信メールの実装
フォームを作成するシリーズ記事の第3段。Webサイトにとって必要不可欠なフォームについて、基本的な仕組みから実践的な機能の実装方法まで、「お問い合わせフォーム」の作成を題材にして解説していきます。
この記事のポイント
- フォームに自動返信メール機能を実装する
- メールの基本的な送信方法が分かる
目次
概要
前回はお問い合わせフォームの基本構造を作成し、入力ページ、確認ページ、完了ページの表示をスイッチできるようになりました。
今回は、完了ページまで進んだタイミングで入力者に自動的にメールを送信する機能を実装していきます。
今回使用しているコードは、前回までに作成したものを使うことを前提としています。
前回のページ:vol.2 フォームの確認ページ&完了ページを作成
前回作成したコードはこちら:vol.2のサンプルコード – GitHub
今回のコードを書いていく場所
メール送信のコードを書く箇所ですが、完了ページを表示するタイミングでメールを送信するので、if文で「送信ボタン」が押されたことを確認している箇所の内側に追記していきます。
Note
赤い箇所は追加するコードを、オレンジの箇所は修正しているコードを示します。
index.php
<?php
//var_dump($_POST);
// 変数の初期化
$page_flag = 0;
if( !empty($_POST['btn_confirm']) ) {
$page_flag = 1;
} elseif( !empty($_POST['btn_submit']) ) {
$page_flag = 2;
// ここにメール送信機能を追加
}
2行目のvar_dump関数を一旦コメントアウトしておいてください。
mb_send_mail関数について
メールを送信するときには、mb_send_mail関数を使います。この関数で指定できるパラメータは次の通り。
3つ目までのパラメータは必須です。1つ目は宛先のメールアドレス、2つ目はメールの件名(表題)、3つ目はメール本文です。
基本パラメータのみでシンプルに送信を行う場合は次のようになります。
mb_send_mail関数の使用例
// 変数の設定
$to = "testtaro@gray-code.com";
$subject = "メール送信のテスト";
$text = "メール本文です。";
// メール送信
mb_send_mail( $to, $subject, $text);
送信に最低限必要な宛先メールアドレス、件名、本文を指定して送信を行っています。
自動返信メールの実装
自動返信メール機能を実装していきましょう。次のコードを追加してください。
index.php
if( !empty($_POST['btn_confirm']) ) {
$page_flag = 1;
} elseif( !empty($_POST['btn_submit']) ) {
$page_flag = 2;
// 変数とタイムゾーンを初期化
$auto_reply_subject = null;
$auto_reply_text = null;
date_default_timezone_set('Asia/Tokyo');
// 件名を設定
$auto_reply_subject = 'お問い合わせありがとうございます。';
// 本文を設定
$auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。
下記の内容でお問い合わせを受け付けました。\n\n";
$auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
$auto_reply_text .= "氏名:" . $_POST['your_name'] . "\n";
$auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";
$auto_reply_text .= "GRAYCODE 事務局";
// メール送信
mb_send_mail( $_POST['email'], $auto_reply_subject, $auto_reply_text);
}
本文は長くなってしまうので、何回かに分けて設定を行なっています。
受け取った方が入力した情報を確認できるよう、フォームの入力値を本文に含めている点にも注目してください。
また、date_default_timezone_set関数でタイムゾーンの設定を行っていますが、これは本文に「お問い合わせ日時」を含める際に、日本の時間帯で出力を行うためです。
mb_send_mail関数を実行するときに、先頭から順にメールアドレス、件名(表題)、本文を指定して送信しています。このプログラムを実際にサーバー上で実行すると、フォームで入力されたメールアドレスへメールが送信されます。
以上でメール送信に必要な最低限の機能を実装しました。
しかし、現状だとメールの送信者情報が正しく表示されません。ヘッダー情報を設定するコードを追加しましょう。
index.php
} elseif( !empty($_POST['btn_submit']) ) {
$page_flag = 2;
// 変数とタイムゾーンを初期化
$header = null;
$auto_reply_subject = null;
$auto_reply_text = null;
date_default_timezone_set('Asia/Tokyo');
// ヘッダー情報を設定
$header = "MIME-Version: 1.0\n";
$header .= "From: GRAYCODE <noreply@gray-code.com>\n";
$header .= "Reply-To: GRAYCODE <noreply@gray-code.com>\n";
// 件名を設定
$auto_reply_subject = 'お問い合わせありがとうございます。';
// 本文を設定
$auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。
下記の内容でお問い合わせを受け付けました。\n\n";
$auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
$auto_reply_text .= "氏名:" . $_POST['your_name'] . "\n";
$auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";
$auto_reply_text .= "GRAYCODE 事務局";
// メール送信
mb_send_mail( $_POST['email'], $auto_reply_subject, $auto_reply_text, $header);
}
実行結果
受信したメールに、表示したい情報がしっかりと表示されました。
運営側への自動返信メールを実装
ここまではフォームの入力者に対する自動返信メールを実装してきました。次に、Webサイト運営側へも自動的にメールが送信されるように設定します。先ほどと同じ要領で追加していきます。
index.php
} elseif( !empty($_POST['btn_submit']) ) {
$page_flag = 2;
// 変数とタイムゾーンを初期化
$header = null;
$auto_reply_subject = null;
$auto_reply_text = null;
$admin_reply_subject = null;
$admin_reply_text = null;
date_default_timezone_set('Asia/Tokyo');
// ヘッダー情報を設定
$header = "MIME-Version: 1.0\n";
$header .= "From: GRAYCODE <noreply@gray-code.com>\n";
$header .= "Reply-To: GRAYCODE <noreply@gray-code.com>\n";
// 件名を設定
$auto_reply_subject = 'お問い合わせありがとうございます。';
// 本文を設定
$auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。
下記の内容でお問い合わせを受け付けました。\n\n";
$auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
$auto_reply_text .= "氏名:" . $_POST['your_name'] . "\n";
$auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";
$auto_reply_text .= "GRAYCODE 事務局";
// メール送信
mb_send_mail( $_POST['email'], $auto_reply_subject, $auto_reply_text, $header);
// 運営側へ送るメールの件名
$admin_reply_subject = "お問い合わせを受け付けました";
// 本文を設定
$admin_reply_text = "下記の内容でお問い合わせがありました。\n\n";
$admin_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
$admin_reply_text .= "氏名:" . $_POST['your_name'] . "\n";
$admin_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";
// 運営側へメール送信
mb_send_mail( 'webmaster@gray-code.com', $admin_reply_subject, $admin_reply_text, $header);
}
実行結果
フォーム入力者と運営側へ、それぞれメールが送信されるようになりました。運営側でもメールを受信することで、お問い合わせが送信されたことが分かるようになりました。
以上で自動返信メールの実装は完了です。フォームらしくなってきました。
今は確認ページで「戻るボタン」を押して入力ページへ戻っても、入力がリセットされてしまいます。次回は、この入力値の引き継ぎを実装します。
今回作成したコードはこちら:vol.3のサンプルコード – GitHub
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
記事一覧
- お問い合わせフォームを作る (イントロダクション) お問い合わせフォームを作る
- お問い合わせフォームを作る(1) お問い合わせフォームの入力ページを作成する
- お問い合わせフォームを作る(2) フォームの確認ページ&完了ページを作成
- お問い合わせフォームを作る(3) 自動返信メールの実装
- お問い合わせフォームを作る(4) 入力値の引き継ぎ
- お問い合わせフォームを作る(5) 入力値のサニタイズ
- お問い合わせフォームを作る(6) 入力値のバリデーション
- お問い合わせフォームを作る(7) 入力項目に合わせた様々なバリデーション
- お問い合わせフォームを作る(8) フォームにファイルアップロード機能をつける
- お問い合わせフォームを作る(9) アップロードしたファイルをメールに添付する
- お問い合わせフォームを作る(10) セッションでフォームの多重送信を防ぐ
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。