最終更新日:
公開日:
ワークショップ
お問い合わせフォームを作る(3)
自動返信メールの実装
ワークショップ「お問い合わせフォームを作成する」の第3回目は、フォームにお問い合わせがあったときに自動で返信メールを送信する機能を実装します。
この記事のポイント
- フォームに自動返信メール機能を実装する
- メールの基本的な送信方法が分かる
目次
概要
前回はお問い合わせフォームの基本構造を作成し、入力ページ、確認ページ、完了ページの表示を切り替えられるようになりました。
今回は、完了ページまで進んだタイミングで入力者に自動的にメールを送信する機能を実装していきます。
今回使用しているコードは、前回までに作成したものを使うことを前提としています。
前回のページ: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つ目はメール本文です。
3つの基本パラメータ「宛先メールアドレス」「件名」「本文」を指定してメールを送信する場合は以下のようになります。
mb_send_mail関数の使用例
// 変数の設定
$to = "testtaro@gray-code.com";
$subject = "メール送信のテスト";
$text = "メール本文です。";
// メール送信
mb_send_mail( $to, $subject, $text);
それではこちらのmb_send_mail関数をフォームに実装していきましょう。
自動返信メールの実装する
自動返信メール機能を実装していきましょう。次のコードを追加してください。
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) セッションでフォームの多重送信を防ぐ
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。