Amazonで商品を見る セール会場へ

Snow Monkey Forms│お問い合わせフォームを毎週自動でテストする方法|reCAPTCHAは残したまま

お問い合わせフォームは、壊れていても気づきにくい部品です。

送った人には「送信しました」と出て、サイトの運営者には何も届かない、という壊れ方をします。

この記事では、Snow Monkey Formsのフォームを、本番と同じ経路で毎週自動的にテストする仕組みを作ります。

reCAPTCHAは外しません。

合言葉を付けた送信だけ、サーバー側で判定を通す形にします。

この記事で分かること

  • reCAPTCHAを回避せずに、自動テストを通す考え方
  • Snow Monkey Formsのどのフックを使うか
  • 送信から、メールが届くまでを確かめるスクリプト
  • 週1回の定期実行と、異常のときの知らせ方
  • この仕組みを動かした初日に見つかった障害
目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

結論:合言葉つきの送信だけ、スパム判定を通す

Snow Monkey Formsは、送信のたびに snow_monkey_forms/spam/validate というフィルターでスパムかどうかを判定します。

reCAPTCHAの判定も、このフィルターの中で動きます。

ここに自分のフィルターを後から足し、HTTPヘッダーの合言葉が合ったときだけ「通す」と返します。

合言葉は64桁のランダムな文字列で、外からは分かりません。

合言葉がない送信は、今までどおりreCAPTCHAで判定されます。

つまり、防御は何も変わりません。

やることやらないこと
合言葉つきの送信だけ判定を通すreCAPTCHAのキーを外す
10分に1回しか受け付けない判定を全部スキップする
テストのメールに印を付ける本物の問い合わせと混ぜる

reCAPTCHAを機械で「突破」する方法は、Googleの利用規約に反します。

自分のサイトでも、やらないほうがよいです。

仕組みの全体

部品役割
サーバー側(Code SnippetsのPHP)合言葉の確認、メールへの印、結果の記録
手元側(Pythonのスクリプト)フォームのページを読み、本番と同じ形で送信し、届いたかを確かめる
定期実行Windowsのタスクスケジューラ(Macならlaunchd、サーバーならcron)
知らせ異常のときだけSlackに投稿(任意)

送信は、ブラウザのJavaScriptが使っているのと同じREST APIに送ります。

CSRFのトークン、リファラーの検査、項目の必須チェック、メール送信まで、本物と同じ道を通ります。

だから「フォームの画面は出るのにメールが出ない」という壊れ方も見つけられます。

必要なもの

  • Snow Monkey Forms(記事の確認は13.0.0)とCode Snippets
  • Python 3(requestsを入れる)
  • 届いたメールを確かめる手段(この記事ではSSHでサーバーのメール箱を見る方法と、IMAPで見る方法を載せる)
  • reCAPTCHAを設定済みのフォーム(設定していなければ、この仕組みは要らない)

この仕組みで分かったこと

筆者のサイトで初めて動かした日、テストは「管理者メールの送信に失敗」で止まりました。

原因は、サーバー移転の前に作ったSMTPの設定が、移転前のサーバー名のままだったことです。

フォームの画面は正常に出ていて、問い合わせた人には何も異常が見えません。

運営者にメールが来ないだけなので、自分では気づけませんでした。

設定を直した直後のテストで、2通(管理者宛と自動返信)が24秒で届くことを確かめられました。

ここから先は、スニペットの全文、送信と確認のスクリプト、定期実行の設定、運用で踏んだ注意点です。

この記事だけ読みたい方は単品購入、ほかの有料記事も読みたい方は購読プランをご確認ください。

購読対象の記事・料金は、下のプラン案内で確認できます。

役に立った記事を、ブログやSNSで紹介しませんか?

紹介制度の対象記事・購読プランを購入した方は、codocで専用リンクと報酬条件を確認できます。

専用リンク経由で購入されると、設定された紹介報酬が発生します。

購読プランの紹介報酬は初回課金のみが対象です。

codocで紹介リンク・報酬条件を確認する

紹介時は、広告・PRであることが読者に分かるように明記してください。

  • URLをコピーしました!

プラグインの設定でお困りなら

プラグインの導入・カスタマイズ代行

プラグインの選定から設定、競合の解消、動作に合わせた追加実装まで承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次