cfFormMailer の自動返信時にエラー

質問全般・改善要望
返信する
baudog
メンバー
メンバー
記事: 31
登録日時: 2013年8月12日(月) 13:34

cfFormMailer の自動返信時にエラー

投稿記事 by baudog »

お世話になります。
-----
MODXのバージョン:1.0.23J
PHPのバージョン:7.3.20
MySQLのバージョン:5.0.12-dev
-----
元々の開発者の cfFormMailer v1.3 は動きませんでしたので、yamaさんがメンテされている cfFormMailer v1.6 を Github から拝借して使用しています。

config.ini では以下の設定をしています。
・自動返信あり(auto_reply = 1)
・自動返信はテキストメール(reply_ishtml = 0)
・HTMLタグ不使用(allow_html = 0)

このとき、管理者宛メールは届くのですが、自動返信メールが届かず以下のエラーを表示します。

Fatal error: Uncaught Error: Unsupported operand types in /home/httpd/vhosts/mydomain.com/httpdocs/assets/snippets/cfFormMailer/class.cfFormMailer.inc.php:668

どうやら、class.cfFormMailer.inc.php の 668 行目にある、$form_u + $additional が、型の違う値をくっつけようとしているというエラーらしいのです。

コード: 全て選択

        $pm->Body = mb_convert_encoding(
            $this->clearPlaceHolder(
                $this->replacePlaceHolder(
                    str_replace(
                        array("\r\n", "\r"),
                        "\n",
                        $tmpl_u
                    ),
                    $form_u + $additional, // <==ここでエラー
                    $this->config('allow_html') ? '<br />' : "\n"
                )
            ),
            $mailCharset,
            $this->config('charset')
        );
        $pm->Encoding = '7bit';
見たところ、$additional は問題ないようですが、$form_u の方は、前述 config.ini で指定したパラメータのときは何も設定されない(存在しない)状態になるようです。

おそらく 653~659行がそれに当たり、

コード: 全て選択

        if ($this->config('reply_ishtml')) {
            if ($this->config('allow_html')) {
                $form_u = $this->nl2br_array($this->form);
            } else {
                $form_u = $this->encodeHTML($this->form, 'true');
            }
        }
このままですと reply_ishtml = 0 のときに $form_u がなにも設定されず、668行目でエラーになります。

ですので、似たようなコードになっている「管理者宛メールの本文生成」部分(530行目)を参考に、653行目の前に以下のコードを追加してみました。

コード: 全て選択

653行目 $form_u = $this->form;
そうしましたら、ちゃんと自動返信メールが届きました。
これが正しいコードかはわかりませんので、後日 yama さんに検証&修正をしていただけましたら幸いです。

よろしくお願いします。
返信する