PHPのコンタクトフォームに自動返信メール機能をつける場合の送信画面の作り方

コンタクトフォームに項目を入力後、自動返信メールを送信する機能を持ったPHPコンタクトフォームを作る際のメール送信画面の作り方です。

やることは以下の通り。

  • メール文を変数に格納し、mb_send_mail()でメールを送信
  • お問い合わせが完了したことを知らせる文章を表示

 

なお、コンタクトフォームから送られてきた情報はSESSION変数に格納されているものとします。

 

自動返信メールとお問い合わせ完了のメッセージ

自動返信メールとお問い合わせ完了のメッセージを表示する画面はsend.phpとします。

<?php  
session_start();
if(!$_SESSION){
  header('Location: ./form.php');
}
$add_header ="From:info@example.com\n";
$add_header .= "Reply-to: info@example.com\n";
$add_header .= "X-Mailer: PHP/". phpversion();
//自動返信メール本文
$messageuser = sprintf("%s",$_SESSION['name']);
$messageuser .= " 様\n\n";
$messageuser .= "この度はお問い合わせいただき誠にありがとうございます。\n\n";
$messageuser .= "下記の内容でお問い合わせを承りました。\n\n\n";
$messageuser .= "================================\n\n";
$messageuser .= sprintf("お名前:%s\n",$_SESSION['name']);
$messageuser .= sprintf("メールアドレス:%s\n",$_SESSION['email']);
$messageuser .= sprintf("電話番号:%s\n",$_SESSION['tel']);
$messageuser .= sprintf("URL:%s\n",$_SESSION['url']);
$messageuser .= sprintf("性別:%s\n",$_SESSION['sex']);
$messageuser .= sprintf("お住まいのエリア:%s\n",$_SESSION['location']);
$messageuser .= sprintf("お問い合わせ項目:\n");
$messageuser .= implode(",",$_SESSION['check']);
$messageuser .= "\n\n";
$messageuser .= sprintf("件名:%s\n",$_SESSION['subject']);
$messageuser .= sprintf("お問い合わせ内容:%s\n",$_SESSION['message']);
$messageuser .= "================================\n\n";
//管理者確認用メール本文
$messageadmin = "コンタクトフォームより下記の内容でお問い合わせがありました。\n\n\n";
$messageadmin .= "================================\n\n";
$messageadmin .= sprintf("お名前:%s\n",$_SESSION['name']);
$messageadmin .= sprintf("メールアドレス:%s\n",$_SESSION['email']);
$messageadmin .= sprintf("電話番号:%s\n",$_SESSION['tel']);
$messageadmin .= sprintf("URL:%s\n",$_SESSION['url']);
$messageadmin .= sprintf("性別:%s\n",$_SESSION['sex']);
$messageadmin .= sprintf("お住まいのエリア:%s\n",$_SESSION['location']);
$messageadmin .= sprintf("お問い合わせ項目:\n");
$messageadmin .= implode(",",$_SESSION['check']);
$messageadmin .= "\n\n";
$messageadmin .= sprintf("件名:%s\n",$_SESSION['subject']);
$messageadmin .= sprintf("お問い合わせ内容:%s\n",$_SESSION['message']);
$messageadmin .= "================================\n\n";
//メール設定
mb_language("ja");
mb_internal_encoding("UTF-8");
//自動返信メール送信設定
mb_send_mail($_SESSION['email'],"【コンタクトフォーム】お問い合わせありがとうございます",$messageuser,$add_header);
//管理者確認用メール送信設定
mb_send_mail("info@example.com","コンタクトフォームよりお問い合わせがありました",$messageadmin,$add_header);
session_destroy();
?>

〜 <!DOCTYLE htmlなどは省略> 〜

<div>
  <p>お問い合わせありがとうございます。メッセージの送信が完了しました。
  </p>
  <p>担当者から返信させていただきますので、今しばらくお待ちくださいませ。
  </p>
</div>

 

解説

自動返信メール機能をつけるので、メールに関する処理を先にやってしまいましょう。

情報はSESSION変数に格納されている前提なので、session_start関数でセッションを開始します。

コンタクトフォームから送られたSESSION変数ではない場合は、if文を使ってフォームの入力画面にリダイレクトさせています。

 

次にメールに関する情報を記述していきます。

mb_send_mail関数に渡すヘッダー情報は先に記述して、「.=」で繋げてしまいましょう。「\n」で改行するのを忘れずに。

 

メール本文は$messageuserに「.=」で全て繋げて入れてしまいます。「\n」を適度に入れると本文が読みやすくなると思います。

お問い合わせした人の名前などの情報はSESSION変数に格納されているはずなので、sprintf関数を使って置き換えます。

例えば

$messageuser = sprintf("%s",$_SESSION['name']);

この部分は”%s”の部分が$_SESSION[‘name’]に置きかわります。

また、複数選択のチェックボックスの場合は情報が連想配列として格納されているので、implode関数で「,」で区切って出力します。

 

お問い合わせがあったことがわかるように管理者自身にも同時にメールを送信して知らせるようにします。

管理者確認用のメール本文も、同じ要領で記述すれば大丈夫です。

 

最後にメール設定で言語と文字コードを明示的に指定しておきましょう。

言語はmb_language(“ja”)、文字コードはmb_internal_encoding(“UTF-8”)と指定します。

 

あとはmb_send_mail関数でお問い合わせをした人と管理者自身にメールを送信すればokです。

相手のメールアドレスはSESSION変数に格納されているはずので、それを指定してあげましょう。件名は文字列で固定してもいいと思います。本文とヘッダー情報も引数に渡せばokです。

管理者自身のメールアドレスはわかっているはずなので、文字列で指定してしまうのがいいでしょう。

また、一番最後の行でsession_destroy関数でセッションを破棄するのを忘れないようにしてください。

 

これでコンタクトフォームに正しく入力されたことを確認する画面と、メールを自動で送信する機能を持ったコンタクトフォームは完成です。

メール本文はほとんどsprintf関数で置き換えて、時々\nで改行しているだけなので、処理自体はそこまで難しくありません。