質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

3244閲覧

お問合せ側への自動返信メールを作成したい(PHP)

mariueda

総合スコア8

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2020/05/12 14:25

編集2022/01/12 10:55

運営側への自動返信メールに、問合せ側への自動返信メールを追記しました。
何度実装しても運営側にしかメールが送信されません。
問合せ側への自動返信メールを送信するにはどのように記述したら良いのでしょうか。

php

1<?php 2session_start(); 3 4//クリックジャッキング対策 5header('X-FRAME-OPTIONS: SAMEORIGIN'); 6 7// HTML特殊文字をエスケープする関数 8function escape($str) { 9 return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); 10} 11 12//前後にある半角全角スペースを削除する関数 13function spaceTrim ($str) { 14 // 行頭 15 $str = preg_replace('/^[  ]+/u', '', $str); 16 // 末尾 17 $str = preg_replace('/[  ]+$/u', '', $str); 18 return $str; 19} 20 21//tokenを変数に入れる 22$token = $_POST['token']; 23 24// トークンを確認し、確認画面を表示 25if(!(hash_equals($token, $_SESSION['token']) && empty($token))) { 26 echo "不正アクセスの可能性があります"; 27 exit(); 28} 29?> 30<!DOCTYPE html> 31<html> 32<head> 33<meta charset="UTF-8"> 34<title>メール送信完了|メール送信フォーム</title> 35</head> 36<body> 37 38<?php 39/******************************* 40 データの受け取り 41*******************************/ 42$name = $_POST["name"]; //名前 43$furigana = $_POST["furigana"]; 44$email = $_POST["email"]; //メールアドレス 45$tel = $_POST["tel"]; 46$message = $_POST["message"]; //お問合せ内容 47 48//危険な文字列を入力された場合にそのまま利用しない対策 49$radio = htmlspecialchars($radio, ENT_QUOTES); 50$name = htmlspecialchars($name, ENT_QUOTES); 51$furigana = htmlspecialchars($furigana, ENT_QUOTES); 52$email = htmlspecialchars($email, ENT_QUOTES); 53$tel = htmlspecialchars($tel, ENT_QUOTES); 54$message = htmlspecialchars($message, ENT_QUOTES); 55 56/******************************* 57 未入力チェック 58*******************************/ 59$errmsg = ''; //エラーメッセージを空にしておく 60if ($name == '') { 61 $errmsg = $errmsg.'<p>名前が入力されていません。</p>'; 62} 63if ($furigana == '') { 64 $errmsg = $errmsg.'<p>フリガナが入力されていません。</p>'; 65} 66if ($email == '') { 67 $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>'; 68} 69if ($tel == '') { 70 $errmsg = $errmsg.'<p>電話番号が入力されていません。</p>'; 71} 72if ($message == '') { 73 $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>'; 74} 75 76/******************************* 77 メール送信の実行 78*******************************/ 79if ($errmsg != '') { 80 //エラーメッセージが空ではない場合には、[前のページへ戻る]ボタンを表示する 81 echo $errmsg; 82 83 //[前のページへ戻る]ボタンを表示する 84 echo '<form method="post" action="index.html">'; 85 echo '<input type="hidden" name="name" value="'.$name.'">'; 86 echo '<input type="hidden" name="name" value="'.$furigana.'">'; 87 echo '<input type="hidden" name="email" value="'.$email.'">'; 88 echo '<input type="hidden" name="name" value="'.$tel.'">'; 89 echo '<input type="hidden" name="message" value="'.$message.'">'; 90 echo '<input type="submit" name="backbtn" value="前のページへ戻る">'; 91 echo '</form>'; 92} else { 93 // ここから追記部分-------------------------------------------- 94 // 変数とタイムゾーンを初期化 95 $header = null; 96 $auto_reply_subject = null; 97 $auto_reply_text = null; 98 $admin_reply_subject = null; 99 $honbun = null; 100 date_default_timezone_set('Asia/Tokyo'); 101 102 // ヘッダー情報を設定 103 $header = "MIME-Version: 1.0\n"; 104 $header .= "From: SAMPLE <sample@gmail.com>\n"; 105 $header .= "Reply-To: SAMPLE <sample@gmail.com>\n"; 106 107 // 件名を設定 108 $auto_reply_subject = 'お問い合わせありがとうございます。'; 109 110 // 本文を設定 111 $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。 112 下記の内容でお問い合わせを受け付けました。\n\n"; 113 $auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; 114 $auto_reply_text .= "氏名:" . $_POST['name'] . "\n"; 115 $auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n"; 116 $auto_reply_text .= "SAMPLE 事務局"; 117 118 //メール送信処理 119 $mailsousin = mb_send_mail($_POST['email'], $auto_reply_subject, $auto_reply_text, $header,$parameter); 120 121 // 運営側へ送るメールの件名 122 $admin_reply_subject = "お問い合わせを受け付けました"; 123 // ここまで追記--------------------------------------- 124 125 //エラーメッセージが空の場合には、メール送信処理を実行する 126 //メール本文の作成 127 $honbun = ''; 128 $honbun .= "メールフォームよりお問い合わせがありました。\n\n"; 129 $honbun .= "【お名前】\n"; 130 $honbun .= $name."\n\n"; 131 $honbun .= "【フリガナ】\n"; 132 $honbun .= $furigana."\n\n"; 133 $honbun .= "【メールアドレス】\n"; 134 $honbun .= $email."\n\n"; 135 $honbun .= "【電話番号】\n"; 136 $honbun .= $tel."\n\n"; 137 $honbun .= "【お問い合わせ内容】\n"; 138 $honbun .= $message."\n\n"; 139 140 //エンコード処理 141 mb_language("Japanese"); 142 mb_internal_encoding("UTF-8"); 143 144 //メールの作成 145 $mail_to = "sample@gmail.com"; //送信先メールアドレス 146 $mail_subject = "メールフォームよりお問い合わせ"; //メールの件名 147 $mail_body = $honbun; //メールの本文 148 $mail_header = "from:".$email; //送信元として表示されるメールアドレス 149 $parameter="-f sample@gmail.com"; 150 151 //メール送信処理 152 $mailsousin = mb_send_mail($mail_to, $mail_subject, $mail_body, $mail_header,$parameter); 153 154 //メール送信結果 155 if($mailsousin == true) { 156 echo '<p>お問い合わせメールを送信しました。</p>'; 157 ?> 158 <script> 159 window.location = 'http://sample.ne.jp/sample/index.html'; 160 </script> 161 <?php 162 } else { 163 echo '<p>メール送信でエラーが発生しました。</p>'; 164 } 165} 166?> 167 168</body> 169</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yasumichi

2020/05/12 14:51

困難は、分割せよ、と言いたくなるなあ。 < ゴミコメント
m.ts10806

2020/05/12 14:55

これも本件とは別件なのでコメントで ・escape()は何のために用意したのでしょうか ・いずれにしてもHTMLのエスケープは画面出力時に行うものです
退会済みユーザー

退会済みユーザー

2020/05/13 03:34

エンコーディングの設定がコードの後半の方で出てくるのも、ねぇ。php.iniで適切に設定してあれば不要なはずですし。なにかできない事情でもお有りなのでしょうか?
guest

回答2

0

何度実装しても運営側にしかメールが送信されません。

問合せ側への自動返信メールを送信するにはどのように記述したら良いのでしょうか。

サーバのメール送信システムが正しく設定されていないのでは?
メールシステム理解してないのであれば、自動返信はやめたほうが良いです。

以下ざっと見た感じでの問題点(ほぼ、mb_send_mail の箇所しか見てない^^;)
・これ、notice が出ません?一件目は $parameter が定義されてないです。
・$_POST['email'] はバリデーションしてください。カンマが入ると複数の宛先設定が可能です。
・基本方針として、$header を文字連結では作らないでください。配列で渡すように。配列で渡せないバージョンの場合は仕方ないですけど。

うーん。notice が原因かも。

投稿2020/05/12 20:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP

1<!DOCTYPE html> 2<html> 3<head> 4 <!-- インデント使おうぜ --> 5<meta charset="UTF-8"> 6<title>メール送信完了|メール送信フォーム</title> 7</head> 8<body> 9 10<?php 11/******************************* 12 データの受け取り 13*******************************/ 14 15/*直後に再代入するならいちいち定義すな。*/ 16$name = $_POST["name"]; //名前 17$furigana = $_POST["furigana"]; 18$email = $_POST["email"]; //メールアドレス 19$tel = $_POST["tel"]; 20$message = $_POST["message"]; //お問合せ内容 21 22//危険な文字列を入力された場合にそのまま利用しない対策 23$radio = htmlspecialchars($radio, ENT_QUOTES); 24$name = htmlspecialchars($name, ENT_QUOTES); 25$furigana = htmlspecialchars($furigana, ENT_QUOTES); 26$email = htmlspecialchars($email, ENT_QUOTES); 27$tel = htmlspecialchars($tel, ENT_QUOTES); 28$message = htmlspecialchars($message, ENT_QUOTES); 29 30/******************************* 31 未入力チェック 32*******************************/ 33/*何故、ここで文字結合するの?*/ 34$errmsg = ''; //エラーメッセージを空にしておく 35if ($name == '') { 36 $errmsg = $errmsg.'<p>名前が入力されていません。</p>'; 37} 38if ($furigana == '') { 39 $errmsg = $errmsg.'<p>フリガナが入力されていません。</p>'; 40} 41if ($email == '') { 42 $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>'; 43} 44if ($tel == '') { 45 $errmsg = $errmsg.'<p>電話番号が入力されていません。</p>'; 46} 47if ($message == '') { 48 $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>'; 49} 50 51/******************************* 52 メール送信の実行 53*******************************/ 54if ($errmsg != '') { 55 //エラーメッセージが空ではない場合には、[前のページへ戻る]ボタンを表示する 56 echo $errmsg; 57 58 //[前のページへ戻る]ボタンを表示する 59 /*ヒュアドキュメント使おうぜ*/ 60 echo '<form method="post" action="index.html">'; 61 echo '<input type="hidden" name="name" value="'.$name.'">'; 62 echo '<input type="hidden" name="name" value="'.$furigana.'">'; 63 echo '<input type="hidden" name="email" value="'.$email.'">'; 64 echo '<input type="hidden" name="name" value="'.$tel.'">'; 65 echo '<input type="hidden" name="message" value="'.$message.'">'; 66 echo '<input type="submit" name="backbtn" value="前のページへ戻る">'; 67 echo '</form>'; 68} else { 69 // ここから追記部分-------------------------------------------- 70 // 変数とタイムゾーンを初期化 71 $header = null; 72 $auto_reply_subject = null; 73 $auto_reply_text = null; 74 $admin_reply_subject = null; 75 $honbun = null; 76 date_default_timezone_set('Asia/Tokyo'); 77 78 // ヘッダー情報を設定 79 /*いちいち改行すな*/ 80 $header = "MIME-Version: 1.0\n"; 81 $header .= "From: SAMPLE <sample@gmail.com>\n"; 82 $header .= "Reply-To: SAMPLE <sample@gmail.com>\n"; 83 84 // 件名を設定 85 $auto_reply_subject = 'お問い合わせありがとうございます。'; 86 87 // 本文を設定 88 /*ヒュアドキュメント使えし*/ 89 $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。 90 下記の内容でお問い合わせを受け付けました。\n\n"; 91 $auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; 92 $auto_reply_text .= "氏名:" . $_POST['name'] . "\n"; 93 $auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n"; 94 $auto_reply_text .= "SAMPLE 事務局"; 95 96 //メール送信処理 97 $mailsousin = mb_send_mail($_POST['email'], $auto_reply_subject, $auto_reply_text, $header,$parameter); 98 99 // 運営側へ送るメールの件名 100 $admin_reply_subject = "お問い合わせを受け付けました"; 101 // ここまで追記--------------------------------------- 102 103 //エラーメッセージが空の場合には、メール送信処理を実行する 104 //メール本文の作成 105 /*ヒュアドキュメント使えや*/ 106 $honbun = ''; 107 $honbun .= "メールフォームよりお問い合わせがありました。\n\n"; 108 $honbun .= "【お名前】\n"; 109 $honbun .= $name."\n\n"; 110 $honbun .= "【フリガナ】\n"; 111 $honbun .= $furigana."\n\n"; 112 $honbun .= "【メールアドレス】\n"; 113 $honbun .= $email."\n\n"; 114 $honbun .= "【電話番号】\n"; 115 $honbun .= $tel."\n\n"; 116 $honbun .= "【お問い合わせ内容】\n"; 117 $honbun .= $message."\n\n"; 118 119 //エンコード処理 120 mb_language("Japanese"); 121 mb_internal_encoding("UTF-8"); 122 123 //メールの作成 124 $mail_to = "sample@gmail.com"; //送信先メールアドレス 125 $mail_subject = "メールフォームよりお問い合わせ"; //メールの件名 126 $mail_body = $honbun; //メールの本文 127 $mail_header = "from:".$email; //送信元として表示されるメールアドレス 128 $parameter="-f sample@gmail.com"; 129 130 //メール送信処理 131 $mailsousin = mb_send_mail($mail_to, $mail_subject, $mail_body, $mail_header,$parameter); 132 133 //メール送信結果 134 if($mailsousin == true) { 135 echo '<p>お問い合わせメールを送信しました。</p>'; 136 ?> 137 <script> 138 window.location = 'http://sample.ne.jp/sample/index.html'; 139 </script> 140 <?php 141 } else { 142 echo '<p>メール送信でエラーが発生しました。</p>'; 143 } 144} 145?> 146 147</body> 148</html>

とりあえず簡単に突っ込みました。

投稿2020/05/12 15:02

kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問