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

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

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

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

632閲覧

PHPで送信フォームを作成したがメールがこない

yu.miura

総合スコア3

PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2021/05/02 13:11

PHPで送信フォームを作成しましたが、メールが届きません。

問い合わせページ→確認ページ→サンクスページまで表示されております。
Xサーバーにアップロードしております。

下記にコードを載せておりますので、ご教授お願いできないでしょうか?

indexPhp

1コード 2<?php 3session_start(); 4$error = []; 5 6if ($_SERVER['REQUEST_METHOD'] === 'POST') { 7 $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 8 9 // フォームの送信時にエラーをチェックする 10 if ($post['name'] === '') { 11 $error['name'] = 'blank'; 12 } 13 if ($post['email'] === '') { 14 $error['email'] = 'blank'; 15 } else if (!filter_var($post['email'], FILTER_VALIDATE_EMAIL)) { 16 $error['email'] = 'email'; 17 } 18 if ($post['contact'] === '') { 19 $error['contact'] = 'blank'; 20 } 21 22 if (count($error) === 0) { 23 // エラーがないので確認画面に移動 24 $_SESSION['form'] = $post; 25 header('Location: confirm.php'); 26 exit(); 27 } 28} else { 29 if (isset($_SESSION['form'])) { 30 $post = $_SESSION['form']; 31 } 32} 33?> 34<!DOCTYPE html> 35<html lang="ja"> 36 37<head> 38 <meta charset="UTF-8"> 39 <title>お問合せフォーム</title> 40 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> 41 <link rel="stylesheet" type="text/css" href="contact.css"> 42</head> 43 44<body> 45 <!-- お問合せフォーム画面 --> 46 <div class="container"> 47 <form action="" method="POST" novalidate> 48 <p>お問い合わせ</p> 49 <div class="form-group"> 50 <div class="row"> 51 <div class="col-2"> 52 <label for="inputName">お名前</label> 53 </div> 54 <div class="col-2"> 55 <p class="require_item">必須</p> 56 </div> 57 <div class="col-md-8"> 58 <input type="text" name="name" id="inputName" class="form-control" value="<?php echo htmlspecialchars($post['name']); ?>" required autofocus> 59 <?php if ($error['name'] === 'blank') : ?> 60 <p class="error_msg">※お名前をご記入下さい</p> 61 <?php endif; ?> 62 </div> 63 </div> 64 </div> 65 <div class="form-group"> 66 <div class="row"> 67 <div class="col-2"> 68 <label for="inputEmail">メールアドレス</label> 69 </div> 70 <div class="col-2"> 71 <p class="require_item">必須</p> 72 </div> 73 <div class="col-8"> 74 <input type="email" name="email" id="inputEmail" class="form-control" value="<?php echo htmlspecialchars($post['email']); ?>" required> 75 <?php if ($error['email'] === 'blank') : ?> 76 <p class="error_msg">※メールアドレスをご記入下さい</p> 77 <?php endif; ?> 78 <?php if ($error['email'] === 'email') : ?> 79 <p class="error_msg">※メールアドレスを正しくご記入ください</p> 80 <?php endif; ?> 81 </div> 82 </div> 83 </div> 84 <div class="form-group"> 85 <div class="row"> 86 <div class="col-2"> 87 <label for="inputContent">お問い合わせ内容</label> 88 </div> 89 <div class="col-2"> 90 <p class="require_item">必須</p> 91 </div> 92 <div class="col-8"> 93 <textarea name="contact" id="inputContent" rows="10" class="form-control" required><?php echo htmlspecialchars($post['contact']); ?></textarea> 94 <?php if ($error['contact'] === 'blank') : ?> 95 <p class="error_msg">※お問い合わせ内容をご記入下さい</p> 96 <?php endif; ?> 97 </div> 98 </div> 99 </div> 100 <div class="row"> 101 <div class="col-8 offset-4"> 102 <button type="submit">確認画面へ</button> 103 </div> 104 </div> 105 </form> 106 </div> 107</body> 108 109</html>

confirmPhp

1コード 2<?php 3session_start(); 4 5// 入力画面からのアクセスでなければ、戻す 6if (!isset($_SESSION['form'])) { 7 header('Location: index.php'); 8 exit(); 9} else { 10 $post = $_SESSION['form']; 11} 12 13if ($_SERVER['REQUEST_METHOD'] === 'POST') { 14 // メールを送信する 15 $to = 'aoiwu@gmail.com'; 16 $from = $post['email']; 17 $subject = 'お問い合わせが届きました'; 18 $body = <<<EOT 19名前: {$post['name']} 20メールアドレス: {$post['email']} 21内容: 22{$post['contact']} 23EOT; 24 25 mb_send_mail($to, $subject, $body, "From: {$from}"); 26 27 // セッションを消してお礼画面へ 28 unset($_SESSION['form']); 29 header('Location: thanks.html'); 30 exit(); 31} 32?> 33<!DOCTYPE html> 34<html lang="ja"> 35 36<head> 37 <meta charset="UTF-8"> 38 <title>お問合せフォーム</title> 39 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> 40 <link rel="stylesheet" type="text/css" href="contact.css"> 41</head> 42 43<body> 44 <!-- お問合せフォーム画面 --> 45 <div class="container"> 46 <form action="" method="POST"> 47 <p>お問い合わせ</p> 48 <div class="form-group"> 49 <div class="row"> 50 <div class="col-3"> 51 <label for="inputName">お名前</label> 52 </div> 53 <div class="col-9"> 54 <p class="display_item"><?php echo htmlspecialchars($post['name']); ?></p> 55 </div> 56 </div> 57 </div> 58 <div class="form-group"> 59 <div class="row"> 60 <div class="col-3"> 61 <label for="inputEmail">メールアドレス</label> 62 </div> 63 <div class="col-9"> 64 <p class="display_item"><?php echo htmlspecialchars($post['email']); ?></p> 65 </div> 66 </div> 67 </div> 68 <div class="form-group"> 69 <div class="row"> 70 <div class="col-3"> 71 <label for="inputContent">お問い合わせ内容</label> 72 </div> 73 <div class="col-9"> 74 <p class="display_item"><?php echo nl2br(htmlspecialchars($post['contact'])); ?></p> 75 </div> 76 </div> 77 </div> 78 <div class="row"> 79 <div class="col-9 offset-3"> 80 <a href="index.php">戻る</a> 81 <button type="submit">送信する</button> 82 </div> 83 </div> 84 </form> 85 </div> 86</body> 87 88</html>

以上がコードとなります。
どうぞよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2021/05/02 22:06

サーバーのエラーログ確認したり、デバッグはされましたか?
guest

回答2

0

ベストアンサー

通常、レンタルサーバーからメールを送信するには

  1. そのサーバで指定している方法でphp.iniを編集する
  2. fromについてもレンタルサーバ指定のものを使う(問い合わせ元のメールアドレスをFromには出来ない or 出来たとしても届かない)

等の注意が必要です。

どこかにXServerの公式ヘルプがありそうな気がしますが見つけられませんでした。
エックスサーバーからPHPでメールを送りたい
【PHP】エックスサーバーからメールを送信する方法
は参考になると思います。

また、mb_send_mail()がTrueを返しても、メールが届かないことは本当によくあるのでSMTPサーバのログを確認することも必要になります。(SMTPサーバのエラーも出ずに届かない(送信先でスパム扱いされて自動削除されている)ことも多いです。)

また、数が少なければGmail等の外部のSMTPサーバを使う方法もあります。
php gmailから送信あたりをキーワードにして調べてみてください。
こちらは環境による差異が少ないので、要件が許すならこちらの方が楽だと思います。

投稿2021/05/02 13:57

tanat

総合スコア18713

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

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

yu.miura

2021/05/03 04:07

ご丁寧に返信ありがとうございます。 php.iniを編集するを行うことで解決いたしました。 有難うございました!
tanat

2021/05/03 04:19

解決して良かったです。 フィードバックありがとうございます
guest

0

mb_send_mailの返り値を確認しましょう。
成功した場合にtrueを、失敗した場合にfalseを返します。
あとヘッダーが不十分な可能性があります。
こちらを参考にどうぞ
http://mislead.jp/1189.html

投稿2021/05/02 13:19

itagagaki

総合スコア8402

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

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

yu.miura

2021/05/03 04:20

ご丁寧にURLありがとうございました。 勉強させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問