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

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

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

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

メール

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

解決済

PHPを使ったメールの送信 未経験独学

cdkaoekd434
cdkaoekd434

総合スコア0

PHP

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

メール

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

2回答

-4評価

2クリップ

1159閲覧

投稿2021/03/29 09:29

編集2022/01/12 10:58

実現したいこと

入力フォームで、入力された情報をPHPMailerを使ってメールの送受信を行いたいのですが、流れとしては、入力フォーム→確認画面→送信の順で行きたいのですが、送信の部分で以下のようなエラーが出てつまずいてます。調べてみても、原因が分からず、疲れを感じたので、質問することにしました。teratailの利用は初めてです。エンジニアではなく自営業です。

以下エラー名。送信失敗: Message body empty

経過について

PHPMailerでのメールの送受信は1度成功していますので、STMP設定のコードは問題ないです多分。
確認画面の表示と本文に表示されるメッセージ項目数を追加したいと思いコードを少し変更したら、エラーが出るようになりました。セキュリティー対策tokenも追加しました。form1とform2では、確認画面までは表示されるので、問題があるのはform3のコードだと思うのですが、原因が分からず困っています。
非常にわかりずらい、コードですが、ヒントだけでもいいので、教えていただけないでしょうか? htmlspecialcharsは後で修正します。

コードの内容は以下です。
入力フォームの画面のコード(form1)

php

<?php session_start(); $errors = array(); if(isset($_POST['submit'])) { $name = $_POST['name']; $email = $_POST['email']; $time1 =$_POST['time1']; $timetime =$_POST['timetime']; $subject = $_POST['subject']; $body = $_POST['body']; $name = htmlspecialchars($name, ENT_QUOTES); $email = htmlspecialchars($email, ENT_QUOTES); $time1 = htmlspecialchars($time1, ENT_QUOTES); $timetime = htmlspecialchars($timetime, ENT_QUOTES); if($name === "") { $errors['name'] ="名前が入力されていません。 "; } if($email === "") { $errors['email'] ="メールアドレスが入力されていません。 "; } if($time1 === "") { $errors['time1'] ="第1希望:※月と日付を選択してください。 "; } if($timetime === "") { $errors['timetime'] ="第1希望:※時間を選択してください。 "; } if(count($errors) === 0) { $_SESSION['name'] = $name; $_SESSION['email'] = $email; $_SESSION['time1'] = $time1; $_SESSION['timetime'] = $timetime; header('Location:http://www.△△form2.php'); exit(); } } if(isset($_GET['action']) && $_GET['action'] === 'edit'){ $name = $_SESSION['name']; $email = $_SESSION['email']; $time1 = $_SESSION['time1']; $timetime = $_SESSION['timetime']; } ?> <!DOCTYPE html> <html> <head> <meta content="text/html; charset=utf-8"/> <title>お問い合わせ</title> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> </script> <?php echo "<ul>";foreach($errors as $value) { echo "<li>"; echo $value; echo "</li>"; } echo "</ul>"; ?> </head> <body> <form action ="form1.php" method ="post"> <table> <tr> <th>名前:※</th><td><input type="text" name="name" id="name" value="<?php if(isset($name)){ echo $name; } ?>"/></td> </tr> <tr> <th>メールアドレス:※</th><td><input type="text" name="email" id="address" value="<?php if(isset($email)){ echo $email; } ?>"/></td> </tr> <tr> <th>下記選択枠より、</span><span>ご希望の日時をご選択ください。</span></th><td> <table><tbody><tr class="time_list"> <td class="b">第1希望:<span class="fontS"></span></td> <td class="fontSS"> <table><tbody><tr class="time_list2"> <td> <input type="date" id="input_date1" class="cal lt_004 hasDatepicker" name="time1" value="<?php if(isset($time1)){ echo $time1; } ?>"/></td > <td> <div class="wrap"> <select id="input_time1" name="timetime"> <option value="">時間指定</option> <option value="10:00~11:00"<?php if(isset($timetime) && $timetime==="10:00~11:00") { echo "selected" ;} ?>>10:00~11:00</option> <option value="11:00~12:00"<?php if(isset($timetime) && $timetime==="11:00~12:00") { echo "selected" ;} ?>>11:00~12:00</option> </select> </div> </td> </tr></tbody></table> </td> </tr></tbody></table> <td colspan="2"><input type ="submit" name ="submit"value="確認画面へ"></td></tr> </form> </body></html>

確認画面のコード(form2)

php

<?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; $email = $_SESSION['email']; $time1 = $_SESSION['time1']; $timetime = $_SESSION['timetime']; } $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(48)); $token = htmlspecialchars($_SESSION['token'], ENT_QUOTES); ?> <!DOCTYPE html> <html> <head> <meta charset ="utf-8"> <title>確認画面</title> </head> <body> <form action ="form3.php" method ="post"> <input type ="hidden" name ="token" value ="<?php echo $token ?>"> <table> <tr> <th>名前:</th><td><?php echo $name; ?></td> </tr> <tr> <th>メールアドレス:</th><td><?php echo $email; ?></td> </tr> <th>第1希望:</th><td><?php echo $time1; ?></td> <tr> </tr> <th>時間:</th><td><?php echo $timetime; ?></td> <tr> </tr> <td colspan="2"><input type ="submit" name="submit"value ="送信する"></td> </tr> </table> </form> <p><p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body> </html>

PHPMaierのコード (form3)

php

<?php // PHPMailer クラスをネーム空間にインポート use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; require('PHPMailer/src/PHPMailer.php'); require('PHPMailer/src/Exception.php'); require('PHPMailer/src/SMTP.php'); // 入力内容の取得・変数に格納 session_start(); if(isset($_POST['token'], $_SESSION['token']) && ($_POST['token'] === $_SESSION['token'])){ unset($_SESSION['token']); $name = $_SESSION['name']; $email = $_SESSION['email']; $time1 = $_SESSION['time1']; $timetime = $_SESSION['timetime']; } // メール日本語対応 mb_language("japanese"); mb_internal_encoding("UTF-8"); // インスタンス生成 $mail = new PHPMailer(true); // 文字エンコードを指定 $mail->CharSet = 'utf-8'; try { // デバッグ設定 // $mail->SMTPDebug = 2; // デバッグ出力を有効化(レベルを指定) // $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";}; // SMTPサーバの設定 $mail->isSMTP(); // SMTPの使用宣言 $mail->Host = '△△.com'; // SMTPサーバーを指定 $mail->SMTPAuth = true; // SMTP authenticationを有効化 $mail->Username = '■■.org'; // SMTPサーバーのユーザ名 $mail->Password = '???'; // SMTPサーバーのパスワード $mail->SMTPSecure = 'ssl'; // 暗号化を有効(tls or ssl)無効の場合はfalse $mail->Port = 465; // TCPポートを指定(tlsの場合は465や587) // メール本体 $mail->setFrom('■■.org', 'maru'); // 送信元メールアドレスと名前 $mail->addAddress($email,$name); // 送信先メールアドレスと名前 $mail->Body = $name; $mail->Body = $email; $mail->Body = $time1; $mail->Body = $timetime; // 送信 $mail->send(); echo '送信済み'; } catch (Exception $e) { echo "送信失敗: {$mail->ErrorInfo}"; } ?>

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

PHP

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

メール

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