PHPプログラミング

最終更新日:
公開日:

ワークショップ

お問い合わせフォームを作る(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関数を使います。
この関数で指定できるパラメータは以下の内容です。

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