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

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

ただいまの
回答率

88.13%

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 632

score 8

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

<?php
session_start();

//クリックジャッキング対策
header('X-FRAME-OPTIONS: SAMEORIGIN');

// HTML特殊文字をエスケープする関数
function escape($str) {
    return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}

//前後にある半角全角スペースを削除する関数
function spaceTrim ($str) {
    // 行頭
    $str = preg_replace('/^[  ]+/u', '', $str);
    // 末尾
    $str = preg_replace('/[  ]+$/u', '', $str);
    return $str;
}

//tokenを変数に入れる
$token = $_POST['token'];

// トークンを確認し、確認画面を表示
if(!(hash_equals($token, $_SESSION['token']) && empty($token))) {
    echo "不正アクセスの可能性があります";
    exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>メール送信完了|メール送信フォーム</title>
</head>
<body>

<?php
/*******************************
 データの受け取り 
*******************************/
$name        = $_POST["name"];        //名前
$furigana = $_POST["furigana"];
$email    = $_POST["email"];    //メールアドレス
$tel = $_POST["tel"];
$message = $_POST["message"];        //お問合せ内容

//危険な文字列を入力された場合にそのまま利用しない対策
$radio = htmlspecialchars($radio, ENT_QUOTES);
$name = htmlspecialchars($name, ENT_QUOTES);
$furigana = htmlspecialchars($furigana, ENT_QUOTES);
$email    = htmlspecialchars($email, ENT_QUOTES);
$tel = htmlspecialchars($tel, ENT_QUOTES);
$message = htmlspecialchars($message, ENT_QUOTES);

/*******************************
 未入力チェック 
*******************************/
$errmsg = '';    //エラーメッセージを空にしておく
if ($name == '') {
    $errmsg = $errmsg.'<p>名前が入力されていません。</p>';
}
if ($furigana == '') {
    $errmsg = $errmsg.'<p>フリガナが入力されていません。</p>';
}
if ($email == '') {
    $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>';
}
if ($tel == '') {
    $errmsg = $errmsg.'<p>電話番号が入力されていません。</p>';
}
if ($message == '') {
    $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>';
}

/*******************************
 メール送信の実行
*******************************/
if ($errmsg != '') {
    //エラーメッセージが空ではない場合には、[前のページへ戻る]ボタンを表示する
    echo $errmsg;

    //[前のページへ戻る]ボタンを表示する
    echo '<form method="post" action="index.html">';
    echo '<input type="hidden" name="name" value="'.$name.'">';
    echo '<input type="hidden" name="name" value="'.$furigana.'">';
    echo '<input type="hidden" name="email" value="'.$email.'">';
    echo '<input type="hidden" name="name" value="'.$tel.'">';
    echo '<input type="hidden" name="message" value="'.$message.'">';
    echo '<input type="submit" name="backbtn" value="前のページへ戻る">';
    echo '</form>';
} else {
    // ここから追記部分--------------------------------------------
    // 変数とタイムゾーンを初期化
    $header = null;
    $auto_reply_subject = null;
    $auto_reply_text = null;
    $admin_reply_subject = null;
    $honbun = null;
    date_default_timezone_set('Asia/Tokyo');

    // ヘッダー情報を設定
    $header = "MIME-Version: 1.0\n";
    $header .= "From: SAMPLE <sample@gmail.com>\n";
    $header .= "Reply-To: SAMPLE <sample@gmail.com>\n";

    // 件名を設定
    $auto_reply_subject = 'お問い合わせありがとうございます。';

    // 本文を設定
    $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。
    下記の内容でお問い合わせを受け付けました。\n\n";
    $auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
    $auto_reply_text .= "氏名:" . $_POST['name'] . "\n";
    $auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";
    $auto_reply_text .= "SAMPLE 事務局";

    //メール送信処理
    $mailsousin    = mb_send_mail($_POST['email'], $auto_reply_subject, $auto_reply_text, $header,$parameter);

    // 運営側へ送るメールの件名
    $admin_reply_subject = "お問い合わせを受け付けました";
    // ここまで追記---------------------------------------

    //エラーメッセージが空の場合には、メール送信処理を実行する
    //メール本文の作成
    $honbun = '';
    $honbun .= "メールフォームよりお問い合わせがありました。\n\n";
    $honbun .= "【お名前】\n";
    $honbun .= $name."\n\n";
    $honbun .= "【フリガナ】\n";
    $honbun .= $furigana."\n\n";
    $honbun .= "【メールアドレス】\n";
    $honbun .= $email."\n\n";
    $honbun .= "【電話番号】\n";
    $honbun .= $tel."\n\n";
    $honbun .= "【お問い合わせ内容】\n";
    $honbun .= $message."\n\n";

    //エンコード処理
    mb_language("Japanese");
    mb_internal_encoding("UTF-8");

    //メールの作成
    $mail_to    = "sample@gmail.com";            //送信先メールアドレス
    $mail_subject    = "メールフォームよりお問い合わせ";    //メールの件名
    $mail_body    = $honbun;                //メールの本文
    $mail_header    = "from:".$email;            //送信元として表示されるメールアドレス
    $parameter="-f sample@gmail.com";

    //メール送信処理
    $mailsousin    = mb_send_mail($mail_to, $mail_subject, $mail_body, $mail_header,$parameter);

    //メール送信結果
    if($mailsousin == true) {
        echo '<p>お問い合わせメールを送信しました。</p>';
        ?>
        <script>
        window.location = 'http://sample.ne.jp/sample/index.html';
    </script>
        <?php
    } else {
        echo '<p>メール送信でエラーが発生しました。</p>';
    }
}
?>

</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Yasumichi

    2020/05/12 23:51

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

    キャンセル

  • m.ts10806

    2020/05/12 23:55

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

    キャンセル

  • m6u

    2020/05/13 12:34

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

    キャンセル

回答 2

+2

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

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

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

うーん。notice が原因かも。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

<!DOCTYPE html>
<html>
<head>
  <!-- インデント使おうぜ -->
<meta charset="UTF-8">
<title>メール送信完了|メール送信フォーム</title>
</head>
<body>

<?php
/*******************************
 データの受け取り 
*******************************/

/*直後に再代入するならいちいち定義すな。*/
$name        = $_POST["name"];        //名前
$furigana = $_POST["furigana"];
$email    = $_POST["email"];    //メールアドレス
$tel = $_POST["tel"];
$message = $_POST["message"];        //お問合せ内容

//危険な文字列を入力された場合にそのまま利用しない対策
$radio = htmlspecialchars($radio, ENT_QUOTES);
$name = htmlspecialchars($name, ENT_QUOTES);
$furigana = htmlspecialchars($furigana, ENT_QUOTES);
$email    = htmlspecialchars($email, ENT_QUOTES);
$tel = htmlspecialchars($tel, ENT_QUOTES);
$message = htmlspecialchars($message, ENT_QUOTES);

/*******************************
 未入力チェック 
*******************************/
/*何故、ここで文字結合するの?*/
$errmsg = '';    //エラーメッセージを空にしておく
if ($name == '') {
    $errmsg = $errmsg.'<p>名前が入力されていません。</p>';
}
if ($furigana == '') {
    $errmsg = $errmsg.'<p>フリガナが入力されていません。</p>';
}
if ($email == '') {
    $errmsg = $errmsg.'<p>メールアドレスが入力されていません。</p>';
}
if ($tel == '') {
    $errmsg = $errmsg.'<p>電話番号が入力されていません。</p>';
}
if ($message == '') {
    $errmsg = $errmsg.'<p>お問合せ内容が入力されていません。</p>';
}

/*******************************
 メール送信の実行
*******************************/
if ($errmsg != '') {
    //エラーメッセージが空ではない場合には、[前のページへ戻る]ボタンを表示する
    echo $errmsg;

    //[前のページへ戻る]ボタンを表示する
    /*ヒュアドキュメント使おうぜ*/
    echo '<form method="post" action="index.html">';
    echo '<input type="hidden" name="name" value="'.$name.'">';
    echo '<input type="hidden" name="name" value="'.$furigana.'">';
    echo '<input type="hidden" name="email" value="'.$email.'">';
    echo '<input type="hidden" name="name" value="'.$tel.'">';
    echo '<input type="hidden" name="message" value="'.$message.'">';
    echo '<input type="submit" name="backbtn" value="前のページへ戻る">';
    echo '</form>';
} else {
    // ここから追記部分--------------------------------------------
    // 変数とタイムゾーンを初期化
    $header = null;
    $auto_reply_subject = null;
    $auto_reply_text = null;
    $admin_reply_subject = null;
    $honbun = null;
    date_default_timezone_set('Asia/Tokyo');

    // ヘッダー情報を設定
    /*いちいち改行すな*/
    $header = "MIME-Version: 1.0\n";
    $header .= "From: SAMPLE <sample@gmail.com>\n";
    $header .= "Reply-To: SAMPLE <sample@gmail.com>\n";

    // 件名を設定
    $auto_reply_subject = 'お問い合わせありがとうございます。';

    // 本文を設定
    /*ヒュアドキュメント使えし*/
    $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。
    下記の内容でお問い合わせを受け付けました。\n\n";
    $auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
    $auto_reply_text .= "氏名:" . $_POST['name'] . "\n";
    $auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n";
    $auto_reply_text .= "SAMPLE 事務局";

    //メール送信処理
    $mailsousin    = mb_send_mail($_POST['email'], $auto_reply_subject, $auto_reply_text, $header,$parameter);

    // 運営側へ送るメールの件名
    $admin_reply_subject = "お問い合わせを受け付けました";
    // ここまで追記---------------------------------------

    //エラーメッセージが空の場合には、メール送信処理を実行する
    //メール本文の作成
    /*ヒュアドキュメント使えや*/
    $honbun = '';
    $honbun .= "メールフォームよりお問い合わせがありました。\n\n";
    $honbun .= "【お名前】\n";
    $honbun .= $name."\n\n";
    $honbun .= "【フリガナ】\n";
    $honbun .= $furigana."\n\n";
    $honbun .= "【メールアドレス】\n";
    $honbun .= $email."\n\n";
    $honbun .= "【電話番号】\n";
    $honbun .= $tel."\n\n";
    $honbun .= "【お問い合わせ内容】\n";
    $honbun .= $message."\n\n";

    //エンコード処理
    mb_language("Japanese");
    mb_internal_encoding("UTF-8");

    //メールの作成
    $mail_to    = "sample@gmail.com";            //送信先メールアドレス
    $mail_subject    = "メールフォームよりお問い合わせ";    //メールの件名
    $mail_body    = $honbun;                //メールの本文
    $mail_header    = "from:".$email;            //送信元として表示されるメールアドレス
    $parameter="-f sample@gmail.com";

    //メール送信処理
    $mailsousin    = mb_send_mail($mail_to, $mail_subject, $mail_body, $mail_header,$parameter);

    //メール送信結果
    if($mailsousin == true) {
        echo '<p>お問い合わせメールを送信しました。</p>';
        ?>
        <script>
        window.location = 'http://sample.ne.jp/sample/index.html';
    </script>
        <?php
    } else {
        echo '<p>メール送信でエラーが発生しました。</p>';
    }
}
?>

</body>
</html>

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る