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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

XHTML

XHTMLは、eXtensible HyperText Markup Languageの略であり、SGMLベースであるHTMLとは違って、有効なXMLドキュメントにもなるHTMLアプリケーションです。XMLベースのツールを用いて生成されるHTMLページのためによく使われるマークアップ言語です。

PHP

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

Q&A

2回答

731閲覧

PHP お問い合わせフォーム メールが届かない

mgrates

総合スコア32

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

XHTML

XHTMLは、eXtensible HyperText Markup Languageの略であり、SGMLベースであるHTMLとは違って、有効なXMLドキュメントにもなるHTMLアプリケーションです。XMLベースのツールを用いて生成されるHTMLページのためによく使われるマークアップ言語です。

PHP

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

0グッド

0クリップ

投稿2022/01/25 09:16

編集2022/01/25 09:21

前提・実現したいこと

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>

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

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

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

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

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

guest

回答2

0

php

1$to = "【送信先メールアドレス】"; 2$header = "Content-Type:text/html;charset=UTF-8\r\n"; 3$header .= "From: 【送信元メールアドレス】\r\n"; 4$header .= "Return-Path: 【送信元メールアドレス】\r\n"; 5mail($to, "題名", "本文", $header);

こんな感じで送信処理をすればどうでしょう。

投稿2022/02/01 01:39

henupyo107

総合スコア202

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

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

0

そのphpコード群を実行している環境について、メール送信がそもそもできるのかを確認しましょう。
レンタルサーバーなど環境が整っている分には問題ないかと思いますが、
パソコン上でテスト環境を構築している場合には注意が必要です。
そのため、実行環境に関する情報を追加で示した方が、より的確なアドバイスができるかと存じます。

また、メールをGmail経由で送信しようとなさっているんでしょうか。
残念ながらGmailでSMTPプロトコルを使ったメール送信をする方法自体が古いです。
プリンタ、スキャナ、アプリからのメール送信 - Google Workspace 管理者 ヘルプ
にある、「Gmail SMTP サーバーを使用する」をお読みいただき、「安全性の低いアプリを有効」にする措置をとる必要があります。
レンタルサーバー上での実行であれば、素直にレンタルサーバーのSMTPサーバー経由にするべきですが、
そうしていないところを見るとやはりテスト環境上でのメール送信なのでしょうか。

投稿2022/01/26 02:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問