ワークショップ

フォームを作る vol.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関数を使います。この関数で指定できるパラメータは次の通り。

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

  • このエントリーをはてなブックマークに追加
前のページへ 一覧ページへ一覧 次のページへ