フォームを複製したら送信時にエラーを吐く

【環境情報】
・baserCMSのバージョン:(例)4.2.1
・レンタルサーバー名:Xserver (PHP 7.4.33)
・使用テーマ:オリジナル
・PHPスキル(自己評価):D

すでにあったお問い合わせフォームを複製して、別のフォームページ(スラッグ:recruit-form)を作成したんですが、送信時に下記エラーが表示されます。
「Error: The request sent to the address ‘/recruit-form/confirm’ was invalid.」

デバッグモード1に切り替えると
以下の表示が出ます。

何らかの理由でメールが送信できませんでした。
Error: The request sent to the address '/recruit-form/confirm' was invalid.

Stack Trace
CORE/Baser/Event/CakeEventManager.php line 243 → EnableReCaptchaControllerEventListener->mailMailBeforeRender(CakeEvent)
            if ($listener['passParams'] === true) {
                $result = call_user_func_array($listener['callable'], $event->data);
            } else {
                $result = call_user_func($listener['callable'], $event);
            }
CORE/Baser/Event/BcEventDispatcher.php line 64 → CakeEventManager->dispatch(CakeEvent)

        $event = new CakeEvent($evnetName, $subject, $params);
        $event->modParams = $modParams;
        $EventManager->dispatch($event);
CORE/Baser/Controller/BcAppController.php line 1579 → BcEventDispatcher::dispatch(string, MailController, null, array)
            'class'        => $this->name
            ], $options);
        App::uses('BcEventDispatcher', 'Event');
        return BcEventDispatcher::dispatch($name, $this, $params, $options);
    }
CORE/Baser/Event/BcControllerEventDispatcher.php line 81 → BcAppController->dispatchEvent(string, null)
            if(!method_exists($event->subject(), 'dispatchEvent')) {
                return;
            }
            $event->subject->dispatchEvent('beforeRender', $event->data);
        }
CORE/Baser/Event/CakeEventManager.php line 243 → BcControllerEventDispatcher->beforeRender(CakeEvent)
            if ($listener['passParams'] === true) {
                $result = call_user_func_array($listener['callable'], $event->data);
            } else {
                $result = call_user_func($listener['callable'], $event);
            }
CORE/Cake/Controller/Controller.php line 941 → CakeEventManager->dispatch(CakeEvent)
 */
    public function render($view = null, $layout = null) {
        $event = new CakeEvent('Controller.beforeRender', $this);
        $this->getEventManager()->dispatch($event);
        if ($event->isStopped()) {
CORE/Baser/Plugin/Mail/Controller/MailController.php line 294 → Controller->render(string)
            $this->set('editLink', ['admin' => true, 'plugin' => 'mail', 'controller' => 'mail_contents', 'action' => 'edit', $this->dbDatas['mailContent']['MailContent']['id']]);
        }
        $this->set('mailContent', $this->dbDatas['mailContent']);
        $this->render($this->dbDatas['mailContent']['MailContent']['form_template'] . DS . 'confirm');
    }
[internal function] → MailController->confirm()
CORE/Cake/Controller/Controller.php line 499 → ReflectionMethod->invokeArgs(MailController, array)
                    'action' => $request->params['action']
                ));
            }
            return $method->invokeArgs($this, $request->params['pass']);
CORE/Cake/Routing/Dispatcher.php line 193 → Controller->invokeAction(CakeRequest)

        $response = $controller->response;
        $render = true;
        $result = $controller->invokeAction($request);
        if ($result instanceof CakeResponse) {
CORE/Cake/Routing/Dispatcher.php line 167 → Dispatcher->_invoke(MailController, CakeRequest)
            ));
        }

        $response = $this->_invoke($controller, $request);
        if (isset($request->params['return'])) {
ROOT/index.php line 158 → Dispatcher->dispatch(CakeRequest, CakeResponse)
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(
    new CakeRequest(),
    new CakeResponse()
);```


どこに原因があるのか分からず困っております。
エラーの理由をご教授いただけると幸いです。
よろしくお願いします。

そもそもなんですが、4.2.1バージョンでPHP7.4は、動作しないと思います。
特にメールプラグインやブログプラグインは。。。

そうなんですね。 :fearful:
元々はPHP7.2.34だったんですが、エラーの原因が分からないので
とりあえずPHPとbaserCMSを最新にアップデートしてみようと試まして、
PHPは7.4.33に上げても表示等には問題なかったんですが、baserは最新にしても4.5.0ぐらいを試してみても内部エラーがでて全く表示できなかったので4.2.1に戻したんですが、PHPは7.4.33でも問題なさそうだなと上げたままにしておりました。
一旦PHPもダウングレードしてみます。

@Gentarou_Nakamura
なるほど、ということは、整理すると、

上記の状況は、

・baserCMSのバージョン:4.2.1
・PHP:7.2.34

の環境で起こったということですね?

そのため、
・baserCMSのバージョン:4.2.1
・PHP:7.2.34 → 7.4.33

次に、
・baserCMSのバージョン:4.2.1 → 4.5.0
・PHP:7.2.34 → 7.4.33

と、順に試したが、いずれの環境でも改善しなかった。

という経緯でしょうか?

はいおっしゃる通りです。
今、PHPを7.2.34に戻してみましたが、エラーの内容は同じものが表示されました。

現状は、
・baserCMSのバージョン:4.2.1
・PHP:7.2.34
でしょうか?

はいそうです。
image

image

ということは、少なくとも問題が発生した時と同じ環境には戻っているとして、
現時点で、コピー元の既お問い合わせフォームは、問題なく動作するのでしょうか?

はい。コピー元は送信できます。

では、一度再現性を確認する意味で、一旦、不具合の出たフォームを削除し、
あらためて、同様にフォームを複製してみて、動作を確認するというのはいかがでしょうか?

了解しました。
試してみます。m(_ _)m

「複製」のキーワードで、GithubのPRを検索したところ、1件だけメールフォーム関連でヒットしたものがありました。

ターゲットバージョンが4.5.4のようですので、フォーム複製時のトラブルが原因ということであるならば、コピー元のフィールド数が多い場合は可能性としてはあるのかもしれません。

エラーの内容を拝見すると、「ReCaptcha」のキーワードがありますので、一度、イメージ認証をオフにして見るなども試してみてはどうでしょうか?

「いいね!」 1

ありがとうございます。
再度フォームを作り直しましたが、結果は同じでした。
なので教えていただいた、リキプチャのプラグインを止めたら送れました!
ですが、再度有効化するとやはり送れず。
EnableReCaptchaというプラグインを使っていたみたいなのですが、baserマーケットで検索してもヒットせず、ネットで検索しても

こんなのしかヒットしませんでした。
やはりこのプラグインを停止するしかないですかね?

前にbaserCMSに迷惑メール防止でリキャプチャを入れれないかと聞かれたことがあったのでその時は自分が対応できなかったんですが、他の製作者が入れてみたのかもしれません。
ちなみにbaserCMSで何か迷惑メール対策としてリキャプチャのようなものはあったりするんでしょうか?
おそらくこのプラグインを止めるとなると代替案を迫られる気がするのですが、自分の認識ではbaserCMSにはGoogleのリキャプチャは(僕では)入れれなさそうな認識なんですが。

なにやら恐ろしげなページですねw
teckingさんが作られたプラグインはどうでしょう?

んん?
同じか?w

そうですね。このページを中国が引っこ抜いた感じなんですかね?w
プラグインの開発者のところにteckingとあるので今回使用してるのがこのプラグインかと思います。

すいません、ちょっと話が見えなくなってるんですが。。。
そもそも、teckingさんの「EnableReCaptcha」プラグインが、当該サイトに実装されていて、現状有効化されているということですか?

もしそうであれば、新たに複製されたメールフォームにも同様に適用されていますので、そもそも、baserCMS側のイメージ認証は、オフの運用です。

わかりにくくて申し訳ありません。
言葉足らずでした。
「教えていただいた、リキプチャのプラグインを止めたら送れました!」
のところは詳しく説明しますと

エラーの内容を拝見すると、「ReCaptcha」のキーワードがありますので、一度、イメージ認証をオフにして見るなども試してみてはどうでしょうか?

という助言をいただいていたのでイメージ認証的なものを探したのですが、特に実装されている様子はなく、プラグイン管理を見たら、EnableReCaptchaというものが入っていて、これによりサイト全体にgoogleのリキャプチャが効いていたのようなので一度、無効化してみたら、複製したフォームが送信できた
という流れになります。
ですのでまとめますと
・baserCMSのバージョン:4.2.1
・PHP:7.2.34
でプラグインとしてteckingさんの「EnableReCaptcha」プラグインが
すでに元からあるお問い合わせの迷惑メール防止に実装されていた状態で、
フォームページを複製したら、元のフォームは送信できるのに
複製したフォームはエラーになるという状態が最初のエラーの状態です。

teckingさんの「EnableReCaptcha」プラグインを無効化してみたら複製したフォームも送信できたという流れです。

すいません、僕の認識不足で申し訳ないんですが、

baserCMSにはデフォルトでフォームにイメージ認証機能のON/OFFを選べるような設定があるのでしょうか?

あります。
このような機能で、

各フォームの設定を開き、以下のように「イメージ認証」欄のチェックボックスをオンオフすることで利用できます。

このイメージ認証と「EnableReCaptcha」プラグインを双方共に有効化することは、おそらく問題ないようにおもいますが、実際のところ双方有効化で何か不具合が起きるかどうかは試していないのでわかりません。ただ、通常運用として、「EnableReCaptcha」プラグインを利用しているのであれば、イメージ認証の運用はオフが常識的かと。

で、今回は、「EnableReCaptcha」プラグインが引っかかっていたというのなら、イメージ認証を使うということになるでしょうか。

しかし、私見ですが、それなりの必須条件が設定されているフィールド数があれば、ほとんどロボットの迷惑メールは来ないと思います。
ブログのコメント欄などは、フィールド数が少なく、必須条件設定はメールアドレスくらいでしょうから危ないですが。
ですので、私が管理するサイトは、イメージ認証オフで運用しているものがほとんどです。実際、ロボットによるスパムはほとんどありません。