前提・実現したいこと
PHPでお問い合わせフォームを作成し、
入力画面(pf.php)→確認画面(confirm.php)→送信完了画面(done.php)の順で送信完了画面を表示するところまでできました。
肝心な自分のメールアドレスに、入力された情報の内容が記載されたメッセージを送ることができず、自分のメールアドレスにメールが届きません。
どこに問題があるか、教えていただけますでしょうか?
ちなみに設定しているメールアドレスはGmailです。
調べたところmail()関数への変更が必要だということだったので、mail()関数にしています。
該当のソースコード
pf.php
<?php session_start(); //クリックジャッキングへの対策 header('X-Frame-Options: DENY'); //トークンの生成 $token = sha1(uniqid(rand(), true)); //トークンを$_SESSIONに格納し、それをキーとする $_SESSION['key'] = $token; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/css/uikit.min.css" /> <!-- UIkit JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/js/uikit.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/js/uikit-icons.min.js"></script> <title>ポートフォリオ</title> <link rel="stylesheet" href="pf.css"> </head> <body> <header> <div class="header-top"> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Skills</a></li> <li><a href="#">Works</a></li> <li><a href="#">Contact</a></li> </ul> </div> <div class="header-image">ヘッダーイメージ</div> </header> <!-- メインコンテンツ --> <main> <div class="about"> <div class="explain">佐伯恵<br>1996年生まれ。熊本県出身<br>同志社大学を卒業後不動産会社へ入社。</div> <div class="explain-image"><img class="logo" src="img/pf.jpg"></div> </div> <div class="skills"> <ul> <li class="border-radius">HTML/CSS</li> <li class="border-radius">JavaScript</li> <li class="border-radius">Python</li> <li class="border-radius">WordPress</li> <li class="border-radius">PHP</li> </ul> </div> <div class="works"> <div>政策実績</div> <div class="uk-child-width-1-3@s uk-grid-match" uk-grid> <div> <div class="uk-card uk-card-hover uk-card-body"> <img class="logo" src="img/pf.jpg"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> </div> </div> <div> <div class="uk-card uk-card-hover uk-card-body"> <img class="logo" src="img/pf.jpg"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> </div> </div> <div> <div class="uk-card uk-card-hover uk-card-body"> <img class="logo" src="img/pf.jpg"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> </div> </div> <div> <div class="uk-card uk-card-hover uk-card-body"> <img class="logo" src="img/pf.jpg"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> </div> </div> <div> <div class="uk-card uk-card-hover uk-card-body"> <img class="logo" src="img/pf.jpg"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> </div> </div> <div> <div class="uk-card uk-card-hover uk-card-body"> <img class="logo" src="img/pf.jpg"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> </div> </div> </div> <ul> </ul> </div> <div class="contact"> <div class="Form"> <form action="confirm.php" method="post"> <h2>お問い合わせフォーム</h2> <div class="Form-Item input-area"> <p class="Form-Item-Label"> <span class="Form-Item-Label-Required">必須</span>氏名 </p> <input type="name" name="name" class="Form-Item-Input" required> </div> <div class="Form-Item input-area"> <p class="Form-Item-Label"><span class="Form-Item-Label-Required">必須</span>メールアドレス</p> <input type="email" name="email" class="Form-Item-Input" placeholder="例)example@gmail.com" required> </div> <div class="Form-Item input-area"> <p class="Form-Item-Label isMsg"> <span class="Form-Item-Label-Required">必須</span>お問い合わせ内容</p> <textarea class="Form-Item-Textarea" name="contact_body" rows="5" required></textarea> </div> <div class="input-area"> <input type="hidden" name="token" value="<?= $token ?>"> <input type="submit" name="submit" value="確認画面へ" class="btn-border"> </div> </form> </div> </div> </main> <!-- フッター --> <footer> <div>フッター</div> </footer> </body> </html>
confirm.php
<?php session_start(); //クリックジャッキングへの対策 header('X-Frame-Options: DENY'); //フォームを経ずにこのページに直接アクセスした場合は拒否する if(!isset($_POST['token'])) { echo '不正なアクセスの可能性があります'; exit; } //フォームに入力された値のエスケープ処理 function e($str) { return htmlspecialchars($str, ENT_QUOTES|ENT_HTML5, 'UTF-8'); } //入力内容を$_SESSIONに格納する $_SESSION['name'] = e($_POST['name']); $_SESSION['email'] = e($_POST['email']); $_SESSION['contact_body'] = e($_POST['contact_body']); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <h2>問合せ内容</h2> <form action="done.php" method="post"> <table border="1"> <tr> <td>名前</td> <td type="name" name="name"><?php echo $_POST['name'];?></td> </tr> <tr> <td>メールアドレス</td> <td type="email" name="email"><?php echo $_POST["email"]; ?></td> </tr> <tr> <td>問い合わせ内容</td> <td type="contact_body" name="contact_body"><?php echo $_POST["contact_body"]; ?></td> </tr> </table> <input type="hidden" name="token" value="<?= $_POST['token'] ?>"> <input type="submit" name="submit" value="送信" /> </form> </body> </html>
done.php
<?php session_start(); //クリックジャッキングへの対策 header('X-Frame-Options: DENY'); //フォームを経ずにこのページに直接アクセスした場合は拒否する if(!isset($_POST['token'])) { echo '不正なアクセスの可能性があります'; exit; } //キーとトークンが一致したら管理者に入力内容がメールで送られる if($_SESSION['key'] === $_POST['token']) { $name = $_SESSION['name']; $email = $_SESSION['email']; $contact_body = $_SESSION['contact_body']; //メールの送り先 $to = '自分のメールアドレス'; //メールの件名 $subject = $name . 'さんからの入力フォームでの送信です'; //メール本文 $contact_body = '名前:' . $name . "\r\n\r\n" . 'メールアドレス:' . $email . "\r\n\r\n" . '内容:' . $contact_body; //メールヘッダー $header = 'From: ' . mb_encode_mimeheader($name). ' <' . $email. '>'; //文字化け対策 mb_language('ja'); mb_internal_encoding('UTF-8'); if(mail($to, $subject, $contact_body, $header)) { //メールが送信出来たら$_SESSIONの値をクリア $_SESSION = array(); //メールが送信出来たらセッションを破棄 session_destroy(); $message = '送信しました'; } else { $message = '送信に失敗しました'; } } else { $message = 'キーとトークンが一致しません'; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>メール送信完了|メール送信フォーム</title> </head> <body> <h2>メール送信完了</h2> <p class="message"> お問い合わせありがとうございます。1営業日以内にご返信させていただきます。<br> 自動返信メールをお送りしておりますのでご確認ください。<br> 1時間たっても届かない場合はお手数ですがこちらからご連絡ください。 </p> </body> </html>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。