- 締切済み
メールが送信されません。<phpを閉じて開いても
メールが送信されません。<phpを閉じて開いても送信ボタンを押してメールが送信されません。 <?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm2 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { //ここの部分でエラーが発生します。 ?>//一回閉じる。 //ここから追加しました。 <?php if ($_POST) { ?> <!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["fullname"] ?> Eメール <?php echo $_POST["email"] ?> 本文 <?php echo nl2br($_POST["message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> <?php } else { ?> <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> <?php } ?> //ここまで <?php //もう一回開ける $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } }
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- t_ohta
- ベストアンサー率38% (5292/13826)
> メール送信機能を実装しましたが送信されません。 Laravelか何か使われているのですかね。 メールサーバに関する設定を行いましたか? メール送信の部分で「@」を付けて処理していますが、これだとエラーメッセージが表示されませんので「@」を付けるのはやめましょう。そうしないとデバッグができません。
- t_ohta
- ベストアンサー率38% (5292/13826)
メールが送信されないのはメールを送信する機能を実装していないからじゃないですか。
- hogehoge78
- ベストアンサー率80% (433/539)
転記いただいているソースについて、予測で抜粋していらっしゃるかと思いますが、それ以外の場所が原因の可能性もあると思います。 例) ①action_updateメソッドの中身一度全部削除した場合に同様のエラーがでるのか ②if ($this->validate()) {} を追記したときにエラーがでるのか ③PHPスクリプトの途中でHTMLを追加した部分のみ削除した場合に、エラーが出るのか ④Locationヘッダでリダイレクトする処理を削除したときにエラーは出るのか 等、スクリプトを少しずつ追加したときにどうなるのか、お試しいただいた方がいいです。
補足
エラーメッセージはでなくなりましたが、メールが送信されません。 <?php namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; class TForm2 extends AbstractController { // action を指定しなかった場合、view が実行されると思われる。初期表示。 public function view() { // 最初にフォームを開いた時の処理です。初期値を view に渡して、編集画面の表示を指定します。 $input['p_name'] = ''; $input['p_email'] = ''; $input['p_message'] = ''; $this->set('isvalid', true); $this->set('input', array()); $this->set('error', array()); $this->set('section', 'edit'); } // 入力値の検証処理 private function validate() { // バリデーション結果を成功に設定 $isvalid = true; // 入力値を取得 $input['p_name'] = trim($this->post('p_name')); $input['p_email'] = trim($this->post('p_email')); $input['p_message'] = trim($this->post('p_message')); // 検証実行 if ($input['p_name'] == '') { $isvalid = false; $error['p_name'] = 'お名前は、必ず入力してください。'; } if ($input['p_email'] == '') { $isvalid = false; $error['p_email'] = 'メールアドレスは、必ず入力してください。'; } if ($input['p_message'] == '') { $isvalid = false; $error['p_message'] = 'メッセージは、必ず入力してください。'; } // View に値を渡す $this->set('isvalid', $isvald); $this->set('input', $input); $this->set('error', $error); return $isvalid; } public function action_confirm() { // 検証結果によって、確認(confirm) を、編集(edit) セクションを出し分け。 if ($this->validate()) { $section = 'confirm'; } else { $section = 'edit'; } $this->set('section', $section); } public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 if ($this->validate()) { //ここの部分でエラーが発生します。 ?>//一回閉じる。 //ここから追加しました。 <?php if ($_POST) { ?> <!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["p_name"] ?> Eメール <?php echo $_POST["p_email"] ?> 本文 <?php echo nl2br($_POST["p_message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> } else { // <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> <?php } ?> //ここまで <?php //もう一回開ける $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); } }
- t_ohta
- ベストアンサー率38% (5292/13826)
> "syntax error, unexpected '<'" これは '<' の位置がおかしいと言っているので、括弧の数が合っていないとか、一行の処理の終わりに ; を入れ忘れていて処理が続いていると判定されて命令文などの辻褄が合わなくなっている時に出るエラーです。 括弧の数や ; が抜けている所が無いか確認しましょう。
補足
以下のエラーが表示されます。 Registered Handlers 0. Concrete\Core\Error\Handler\ErrorHandler 1. Concrete\Core\Error\Handler\JsonErrorHandler vscodeで<や;を調べなおしましたがどこも抜けているところは見られませんでした。 よろしくお願いします。 public function action_update() { // 検証結果によって、完了(complete) を、編集(edit) セクションを出し分け。 // if ($this->validate()) { // } //ここから追加しました。 if ($_POST) { //<!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["fullname"] ?> Eメール <?php echo $_POST["email"] ?> 本文 <?php echo nl2br($_POST["message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> } else { // <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> } //ここまで $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section); }
- t_ohta
- ベストアンサー率38% (5292/13826)
「ここの部分でエラーが発生します。」と記載がありますが、エラーメッセージには何と書かれているのですか?
補足
<?php if ($_POST) { ?>以下を追加する前は このエラーが表示されました。 Arguments "syntax error, unexpected '<'" //ここの部分でエラーが発生します。 //ここから追加しました。 <?php if ($_POST) { ?> <!-- 確認画面 --> <form action="./tform2.php" method="post"> 名前 <?php echo $_POST["fullname"] ?> Eメール <?php echo $_POST["email"] ?> 本文 <?php echo nl2br($_POST["message"]) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> <?php } else { ?> <!-- 入力画面 --> <form action="./tform2.php" method="post"> 名前 <input type="text" name="fullname" value=""> Eメール <input type="email" name="email" value=""> 本文 <textarea name="message" id="" cols="" rows=""></textarea> <input type="submit" name="confirm" value="確認" class="button"> </form> <?php } ?> //ここまで Arguments "syntax error, unexpected '<'" よろしくお願いします。
補足
メール送信機能を実装しましたが送信されません。 ソースコードです。よろしくお願いします。 public function action_confirm($bID = false) { $error_message = []; $comment = $_POST['p_name']; echo $comment; $this->post('p_name') $this->post('p_email') $this->post('p_message') $this->set('errorMsg', $error_message); $token = \Core::make('token'); $this->set('section', 'confirm'); $token = \Core::make('token'); if ($this->bID == $bID && $token->validate('complete')) { $valStrings = Core::make('helper/validation/strings'); $valStrings->email($this->post('email')); if (!$valStrings->email($this->post('email'))) { $error_message[] = h('メールアドレスが正しくありません'); } if (!$valStrings->notempty($this->post('radio')) || !$valStrings->notempty($this->post('nickname')) || !$valStrings->notempty($this->post('email'))) { $error_message[] = h('必須項目を入力してください'); } if (!empty($error_message)) { $this->set('errorMsg', $error_message); } else { $adminUserInfo = UserInfo::getByID(USER_SUPER_ID); $adminEmail = $adminUserInfo->getUserEmail(); $mh = Core::make('helper/mail'); $mh->to(h($this->post('email')));//登録者への自動返信 $mh->bcc(h($adminEmail));//サイトオーナーへbcc送信 $mh->from(h($adminEmail), h('銀ねこアトリエ'));//メール送信元 // メールのテンプレートへ送るパラメーターをセット $mh->addParameter('nickname', h($this->post('nickname'))); $mh->addParameter('email', h($this->post('email'))); $mh->addParameter('radio', h($this->post('radio'))); $mh->load('mail_complete');//メールテンプレの読み込み @$mh->sendMail();//メール送信 if ($this->bID == $bID && $token->validate('confirm')) { $validation = Core::make('helper/validation/strings'); if (!$validation->email($this->post('p_email'))) { $error_message[] = h('メールアドレスが正しくありません'); } if (!$validation->notempty($this->post('p_name')) || !$validation->notempty($this->post('p_message'))) { $error_message[] = h('必須項目を入力してください'); } if (!empty($error_message)) { $this->set('errorMsg', $error_message); } else { /** * メール送信後の処理 */ } } else { $error_message[0] = '送信に失敗しました'; $this->set('errorMsg', $error_message); } } $c = Page::getCurrentPage(); header('location: ' . Core::make('helper/navigation')->getLinkToCollection($c, true) . '/complete'); exit; } else { $this->set('section', 'edit'); } } public function action_complete() { $this->set('section', 'complete'); } public function action_back() { // 戻るボタンで、編集(edit)セクションを表示します。 $section = 'edit'; $this->set('section', $section);