問題のまとめ

元のメッセージ-08-07-2025_10_27_PM.png

お問い合わせフォームから送信された通知メールが迷惑メールフォルダに振り分けられる主な原因は、メールのFromアドレスが、フォームに入力した応募者のメールアドレス(@gmail.comなど)に設定されていることです。

これは「なりすまし」と判断されるため、特にGmailのような厳格なメールサービスでは迷惑メールとして扱われます。サーバー(xserver.jp)自体は正しくメールを送信していますが、送信元アドレス(@gmail.com)と実際の送信サーバー(xserver.jp)が一致しないため、DMARC=failという結果になっています。

解決策としては、Fromアドレスをフォームの設置ドメイン(@tontonhouse.com)に固定する必要があります。

問題解決のために必要な修正は、以下の2つのファイルと箇所です。

1. フォーム設定ページ(Wikiページ)の修正

メール設定を記述しているWikiページに、通知メールのFromアドレスを正しく指定します。これまでのやり取りでこの部分は修正済みかもしれませんが、念のため再度確認してください。

#notice_mail
[::To::[email protected]](<mailto:::To::[email protected]>)
::Subject::お問い合わせありがとうございます
::From::株式会社トントンパン,[email protected]
''

お問い合わせ-の編集-株式会社トントンパン-08-07-2025_09_04_PM.png

2. プラグインのPHPコード(qform.inc.php)の修正

このプラグインは、フォーム設定で::From::を指定しても、デフォルトで応募者のメールアドレスをFromに設定してしまうため、PHPコードを直接修正する必要があります。

修正箇所1:plugin_qform_parse関数(650行目あたり)

plugin_qform_parse()関数は、Wikiページのフォーム設定を解析する部分です。この関数内のcase 'notice_mail' :ブロックは、もともと::From::の設定を読み込むコードが欠落していました。このため、フォームページで::From::を設定しても無視されていました。

これから示す修正は、::From::の設定を正しく読み込んで、変数に格納するためのコードの追加です。


修正前

            // 返信メール
            case 'notice_mail' :
                $body    = '';
                $subject = null;
                $from    = null;
                $to      = null;

                for ($index++ ; $index<$end; $index++)
                {
                    $l = $lines[$index];

                    if (trim($l)=="''") break;

                    if (preg_match('/^::Subject::(.*)$/', $l, $ms))
                    {
                        $subject = $ms[1];
                    }
                    else if (preg_match('/^::To::(.*?)$/', $l, $ms))
                    {
                        $to = array('name'=>'', 'email'=>$ms[1]);
                    }
                    else
                    {
                        $body .= $l."\\n";
                    }
                }

                $ret['conf']['notice_mail'] = array(
                    'subject' => $subject,
                    'from'    => $from,
                    'to'      => $to,
                    'body'    => $body
                );
                break;

修正後

            // 返信メール
            case 'notice_mail' :
                $body    = '';
                $subject = null;
                $from    = null;
                $to      = null;

                for ($index++ ; $index<$end; $index++)
                {
                    $l = $lines[$index];

                    if (trim($l)=="''") break;

                    if (preg_match('/^::From::(.*?),(.*)$/', $l, $ms))
                    {
                        $from = array('name' => $ms[1], 'email' => $ms[2]);
                    }
                    else if (preg_match('/^::Subject::(.*)$/', $l, $ms))
                    {
                        $subject = $ms[1];
                    }
                    else if (preg_match('/^::To::(.*?)$/', $l, $ms))
                    {
                        $to = array('name'=>'', 'email'=>$ms[1]);
                    }
                    else
                    {
                        $body .= $l."\\n";
                    }
                }

                $ret['conf']['notice_mail'] = array(
                    'subject' => $subject,
                    'from'    => $from,
                    'to'      => $to,
                    'body'    => $body
                );
                break;