「contact form 7 スパム 対策」で調べている人の多くは、フォームが動かなくて困っているわけではありません。フォームはきちんと動いていて、送信も届いている。困っているのは、届いたものの中に本物の問い合わせと機械が送ったものが混ざっていて、受信箱を開くたびに仕分けから始めなければならないことのほうです。対策の手段自体は公式のドキュメントに揃っています。問題は、どれを入れるかを決める前に、止めたい範囲と、弾いてしまった分をどう確かめるかを決めていないことです。この記事では、公式が案内している手段を1つずつ確認しながら、それぞれで受け付ける側の手間がどう増えるのかを整理します。
問い合わせフォームに来るスパムは、フォームの故障ではない
問い合わせフォームを公開すると、しばらくして海外からの英語の宣伝や、意味の通らない文章に短縮URLだけが付いた送信が届くようになります。これは設定を間違えたから起きているのではなく、公開されているフォームには機械が自動で送信を試みるからです。窓口の担当者からしばしば出るのは、「設置した直後は何も来なかったのに、数か月してから急に増えた」という話です。フォームのURLが機械に見つかるまでに時間がかかるため、静かな時期のあとに一気に増える形になります。
受け付ける側にとっての実害は、件数そのものよりも、その先の作業に出ます。まず、通知メールの中に本物が埋もれます。1日に届く通知が10件で、そのうち本物が1件だとしたら、残りの9件を開いて中身を確認する時間が毎日発生します。次に、返信の判断が遅れます。「あとでまとめて見る」という運用に切り替えた瞬間、本物の問い合わせへの初動が半日から1日単位で遅れます。採用の応募や、締切のある公募の受付でこれが起きると、遅れがそのまま機会損失になります。
さらに厄介なのが、慣れによる取りこぼしです。毎日9件のスパムを流し読みしていると、判断が雑になります。件名だけを見て消す運用になったところで、件名が素っ気ない本物の問い合わせが混ざって消える。これが起きても、送った側から「返信が来ない」と催促が来るまで気づけません。よく聞くのは、スパムを消す作業そのものより、この取りこぼしが怖くて手作業をやめられない、という悩みです。
Contact Form 7の公式ドキュメントは、この状況に対して複数の防ぎ方を用意しています。そして重要なのは、公式自身が「1つで足りる」とは書いていないことです。
Contact Form 7 provides several spam protection modules; we recommend utilizing different types in combination. 出典: contactform7.com
種類の違うものを組み合わせて使うことが推奨されています。裏を返せば、どれか1つを入れて完了、という設計にはなっていません。組み合わせる以上、入れた分だけ設定と確認の対象が増えます。だからこそ、入れる前に決めておくことがあります。
送信されたメッセージが既定では保存されない、という前提を先に押さえる
スパム対策の話に入る前に、必ず確認しておくべき前提があります。Contact Form 7は、既定では送信されたメッセージをサイト内に保存しません。公式FAQには次のように書かれています。「Contact Form 7 doesn't save the submitted messages. To manage messages through Contact Form 7, you need to install Flamingo (another plugin created by the same developer).」
公式ドキュメントは、この仕様が持つリスクについても明記しています。「Contact Form 7 doesn't store submitted messages anywhere. Therefore, you may lose important messages forever if your mail server has issues or you make a mistake in mail configuration.」つまり、届いたメールがすべてであり、メールが届かなければ送信された内容は残りません。
この前提がスパム対策と直結します。スパム対策は「送信を止める仕組み」です。止めた送信の中身は、保存する仕組みが無ければどこにも残りません。誤って本物を止めてしまっても、何を止めたのかを後から確認する手立てが無い状態になります。
公式は、同じ作者が作っている Flamingo というプラグインを組み合わせる方法を案内しています。「Flamingo saves all messages through contact forms into the database.」Flamingo の readme にも、「Flamingo is a message storage plugin originally created for Contact Form 7, which doesn't store submitted messages.」「After activation of the plugin, you'll find Flamingo on the WordPress admin screen menu. All messages through contact forms are listed there and are searchable.」と記載があります。管理画面のメニューは Flamingo > Inbound Messages で、Inbox と Spam のリストを切り替えられます。
保存する側に回ると、扱う情報の性質も変わります。Flamingo の readme(Privacy Notices)には、「This plugin stores submission data collected through contact forms, which may include the submitters' personal information, in the database on the server that hosts the website.」と書かれています。サイトを載せているサーバの中に、送信者の個人情報を含むデータが貯まるということです。保存期間や削除の方針、誰が閲覧できるのかを決めずに入れると、あとから整理するほうが大変になります。個人情報の取り扱いについての具体的な判断は、所管の窓口や専門家に確かめてください。
保存させたくないフォームがある場合の設定も用意されています。そのフォームの Additional Settings に「do_not_store: true」を書くと、公式の説明では「This setting tells message storage modules, such as Flamingo, not to store messages through this contact form.」となります。逆に、メール送信だけを止めたい場合は「skip_mail: on」があり、こちらは「Unlike demo_mode, skip_mail doesn't affect other activities like storing messages with Flamingo.」と説明されています。保存とメールを別々に制御できる作りです。
スパム対策を入れる前にこの部分を決めておかないと、次の章から出てくるすべての手段について「弾いた分を確認できない」状態のまま運用を始めることになります。順番としては、保存の方針を先に決めるのが安全です。
公式が案内しているスパム対策の手段と、答える人に増える手間
公式の Docs と FAQ で案内されている手段を、1つずつ確認します。どれも設定して終わりではなく、受け付ける側の日々の作業に何かしらの手間が乗ります。その乗り方が手段ごとに違うので、そこまで含めて比べてください。
Akismet
公式が中心に据えているのが Akismet です。「Akismet is a powerful anti-spam service provided by Automattic that protects your contact forms. Spam filtering with Akismet forms the centerpiece of our spam prevention strategy.」と書かれています。プラグイン本体は WordPress に同梱されているため手動でインストールする必要はなく、プラグイン画面で「Akismet Anti-Spam」を有効化します。
使うには APIキーが必要です。公式の記載は「If you use it on a personal blog, you can get an API key for free. For corporate or commercial sites, paid subscriptions are available.」です。個人のブログなら無料のキーが取得でき、企業や商用サイトでは有料の購読が用意されている、という説明になっています。金額の一覧については、Contact Form 7 側の公開ページからは確認できませんでした。なお公式ページには、作者による開示として「Disclosure: The author of this post is an Automattic Affiliate, meaning we get a commission if you decide to make a purchase through the links, at no cost to you.」という記載があります。
フォーム側では、form-tag にオプションを付けて、どの入力欄が何にあたるのかを伝えます。名前欄には akismet:author、メール欄には akismet:author_email、URL欄には akismet:author_url を付けます。公式は「To get accurate results, you are advised to use as many options as possible.」として、使える限り指定することを勧めています。送信されるデータの範囲も明記されています。「Contact Form 7 sends data to Akismet when a user submits the form. The data are composed of all user inputs (not only the fields with an akismet:* option) and variables from the environments.」オプションを付けた欄だけでなく、入力内容と環境の情報が外部のサービスへ送られます。
スパムと判定されたときの挙動は、送信者側から見ると分かりにくい形になっています。「Contact Form 7 will suspend the email and show a message saying, "There was an error trying to send your message," surrounded by an orange border.」メールが止められ、オレンジの枠で「送信エラー」という趣旨の表示が出ます。動作確認をしたいときは、名前欄に「viagra-test-123」、メール欄に「[email protected]」を入れる方法が案内されています。
受け付ける側に増える手間は、主に誤判定の扱いに出ます。公式は次のように書いています。「To report false detections to Akismet, you need the Flamingo plugin activated because Contact Form 7 doesn't come with the ability to store submission data into the database.」誤判定を報告するには Flamingo を有効にしておく必要があり、Flamingo > Inbound Messages で Inbox と Spam のリストを切り替え、Status を変更すると Akismet API へ報告が送られます。
日々の作業に置き換えると、こうなります。まず、受信箱を見るだけでは仕事が終わらなくなります。管理画面の Spam のリストを定期的に開いて、本物が混ざっていないかを目で確認する作業が加わります。次に、本物が混ざっていた場合は Status を変えて報告し、そのうえで送信者へ返信する必要があります。返信の起点がメールではなく管理画面になるため、返信したかどうかの記録は別に持たなければなりません。確認の頻度を毎日にするか週1回にするかで、見落としの起きやすさと作業量が変わります。
Cloudflare Turnstile
Cloudflare が提供している Turnstile も、公式に統合の案内があります。「Turnstile is Cloudflare's smart CAPTCHA alternative. Contact Form 7 provides an integration module with Turnstile, which effectively protects your contact forms from spam bots. Unlike Google reCAPTCHA, Turnstile is available for free. We recommend Turnstile unless you have reasons to use reCAPTCHA.」reCAPTCHA を使う理由が特に無いのであれば Turnstile を勧める、という書き方になっています。
設定は、Cloudflare 側で site key と secret key を取得し、WordPress の Contact > Integration にある Turnstile のセクションに貼る流れです。ウィジェットのモードについては「choose the Managed mode as recommended」と案内されています。既定ではウィジェットがフォームの先頭に配置され、位置を変えたい場合は [turnstile] form-tag を差し込みます。指定できるオプションは action、appearance、language、size、tabindex、theme です。
受け付ける側の手間という観点では、Akismet とは性質が異なります。判定は送信の前段で行われるため、通った送信だけが手元に届きます。そのぶん、管理画面のスパム一覧を毎日見る作業は発生しません。一方で、止められた送信については、フォームの画面上で回答者が困っている状態になります。回答者側の環境によってウィジェットが表示されない、あるいは検証が通らないという申告が来たとき、受け付ける側は手元の記録からは何も確認できません。
もう1つ、回答者への影響を忘れないでください。フォームの先頭にウィジェットが置かれると、回答者は入力を始める前に1つ余分な要素を見ることになります。応募や申し込みの受付では、入力の途中で離脱する人が一定数出ます。ウィジェットが原因かどうかは手元では分かりませんが、設置の前後で送信件数が明確に落ちていないかは見ておく価値があります。
reCAPTCHA (v3)
Google の reCAPTCHA も統合の対象です。「Contact Form 7 5.1 and later uses this reCAPTCHA v3 API. reCAPTCHA v3 works in the background so users don't need to read blurred text in an image or even tick the "I'm not a robot" checkbox.」画像の文字を読ませたり、チェックボックスを押させたりする必要が無い方式です。
設定にあたっての注意が2点あります。1点目はキーの互換性です。「API keys for reCAPTCHA v3 are different from those for v2; keys for v2 don't work with the v3 API.」以前に v2 のキーを取得していた場合、そのままでは使えません。2点目は form-tag の扱いです。「[recaptcha] form-tags are no longer necessary. If [recaptcha] form-tags are found in a form template, Contact Form 7 5.1 or higher ignores them and replaces them with an empty string.」古い記事を見ながら設定すると、不要なタグを書いてしまうことがあります。
Google アカウントで reCAPTCHA Admin Console からサイトを登録し、site key と secret key を Contact > Integration に登録すれば動きます。ここで公式が付けている注意書きは、費用に関わる話です。「Google has a plan to make all reCAPTCHA users migrate to reCAPTCHA Enterprise. This means a cost increase for many of you.」多くの利用者にとって費用の増加を意味する、と書かれています。移行の時期や条件についてはこのページからは確認できませんでした。
受け付ける側の手間は、Turnstile と近い形になります。背後で判定されるため、通ったものだけが届きます。ただし、判定に使われるしきい値の考え方や、止められた送信の内訳を受付の担当者が把握するには、Google 側の管理画面を別途見る必要があります。WordPress の管理画面と Google の管理画面という、見る場所が2つに分かれることが実務上の負担になります。窓口を1人で回している場合、日常的に確認する画面が増えるほど、確認そのものが省略されやすくなります。
禁止リスト(Disallowed list)
WordPress 本体が持っているコメント用の禁止リストを流用する方法も案内されています。「Contact Form 7 can also utilize it to blocklist specific words or IP addresses.」設定場所は WordPress の Settings > Discussion にある「Disallowed Comment Keys」で、1行に1語または1つのIPアドレスを入れます。
効果は明快です。「Messages containing the word or sent from the IP address in the list you've created will be treated as spam by Contact Form 7 and will not be delivered.」リストに入れた語を含むメッセージ、またはリストに入れたIPアドレスから送られたメッセージは、スパムとして扱われ配信されません。送信元のIPを調べる方法として、メール本文に特殊 mail-tag の [_remote_ip] を入れておく手順も案内されています。
この手段は、外部のサービスに依存せず、費用もかからず、自分で完全に制御できる点が長所です。一方で、受け付ける側の手間はいちばん大きくなります。理由は3つあります。
1つ目は、リストを自分で育てる必要があることです。届いたスパムを見て、共通して出てくる語やドメインを拾い、リストに追加する。この作業に終わりはありません。相手の文面が変われば、また新しい語を足すことになります。
2つ目は、誤爆の危険が語の選び方に直結することです。たとえば「loan」や「投資」といった一般的な語を入れると、その語を含む正規の問い合わせも一律で止まります。金融関係の相談を受け付けている窓口が「投資」を禁止語にすれば、本業の問い合わせが届かなくなります。語を追加するたびに、自分の窓口で正規の問い合わせに出てくる可能性があるかを考える必要があります。
3つ目は、IPアドレスで止める場合の副作用です。同じIPアドレスを多数の利用者が共有している回線もあります。1件のスパムを理由にIPを止めると、同じ回線から送ってくる別の人も一緒に止まります。止まったことは相手にも自分にも通知されません。
Really Simple CAPTCHA と、ログイン済みユーザーだけに絞る設定
公式 Docs の一覧には「Really Simple CAPTCHA」も掲載されています。画像に表示された文字を回答者に入力してもらう、古くからある方式です。回答者に明確な作業を1つ増やすことになるため、応募や申し込みの受付で使う場合は、入力の負担が離脱にどう影響するかを合わせて考える必要があります。
もう1つ、性質のまったく違う設定として、Additional Settings の「subscribers_only: true」があります。ログイン済みのユーザーだけが送信できるモードです。公式はこの設定について注意を添えています。「No anti-spam verification will be provided for contact forms in the subscribers-only mode since only welcome people are supposed to be able to use them.」このモードではスパム検証が行われない、という説明です。
受け付ける側の手間として決定的なのは、回答者にアカウント登録とログインを求めることになる点です。社内向けの申請フォームや、既に会員である人だけが使う窓口なら成立します。しかし、外部からの問い合わせや新規の応募を受け付けるフォームでこれをやると、そこで送信をやめる人が確実に出ます。止めたいのはスパムであって、正規の送信ではありません。用途を選ぶ設定です。
手段ごとに増える手間を並べて比べる
同じ「スパム対策」という言葉でくくられていても、受け付ける側に乗る作業はまったく違います。導入の手間ではなく、入れたあとに毎週発生する作業で比べてください。
| 手段 | 設定に必要なもの | 受け付ける側に増える作業 | 回答者への負担 |
|---|---|---|---|
| Akismet | APIキー、form-tag へのオプション追加、Flamingo | スパム一覧の定期確認、誤判定の報告、管理画面からの返信 | 追加の操作は不要 |
| Cloudflare Turnstile | site key と secret key、Integration での設定 | 止められた送信の内訳を手元では確認できない | ウィジェットが1つ増える |
| reCAPTCHA v3 | Google アカウント、v3 用のキー | 確認する管理画面が WordPress と Google の2つに分かれる | 追加の操作は不要 |
| 禁止リスト | WordPress の設定画面のみ | 語とIPの追加を継続、誤爆の見極め | 追加の操作は不要 |
| Really Simple CAPTCHA | プラグインとフォームへの追加 | 入力ミスによる再送の問い合わせ対応 | 画像の文字を読んで入力する |
| subscribers_only | Additional Settings への1行 | ログインできない人からの連絡対応 | アカウント登録とログイン |
表にすると分かりやすいのは、外部サービスに判定を任せる手段は日々の作業が軽く、自分で制御する手段は日々の作業が重い、という傾向です。そして、どの手段でも共通して増えるのが「止まった分を確かめる作業」です。ここを設計しないまま入れると、静かになった受信箱を見て安心し、本物を落としていることに気づかないまま数か月が過ぎます。
入れる前に決めておくこと
手段を選ぶ前に、3つの論点を先に決めてください。決めずに入れると、あとで「どこまでやれば終わりなのか」が分からなくなります。
どこまで止めたいかを先に決める
止める範囲は、窓口の性質によって変わります。判断の分かれ目は、1件の取りこぼしがどれくらい痛いかです。
採用の応募受付や、締切のある公募の受付では、1件の取りこぼしが応募者との関係を直接壊します。この場合、多少スパムが混ざっても通す設計にして、仕分けの手間を受け入れるほうが安全です。逆に、一般的な問い合わせ窓口で、同じ内容が電話でも来る前提があるなら、多少強めに止めても致命傷にはなりません。
決め方の目安として、次の3段階で考えると整理しやすくなります。1段階目は「明らかな機械送信だけを止める」。外部サービスの判定に任せ、禁止リストは使いません。2段階目は「明らかなものに加えて、特定の語やIPも止める」。禁止リストを併用します。3段階目は「関係者だけに絞る」。subscribers_only のようにログインを条件にします。
現在どの段階が必要なのかは、いま届いているスパムの量から逆算できます。1日に1件か2件なら、1段階目で十分に効きます。1日に数十件が届いているなら、2段階目の併用を検討する価値があります。公式が「different types in combination」と書いているのは、まさにこの併用のことです。
段階を上げるほど、正規の送信を止める確率も上がります。だから最初から3段階目を選ばないでください。1段階目から始めて、足りなければ上げる。この順番なら、どの設定を足したときに何が変わったのかを追えます。
正規の問い合わせを弾かないための線引き
正規の送信を弾いてしまう典型的なパターンは、決まっています。事前に線を引いておけば、その多くは避けられます。
まず、禁止語の選び方です。自分の窓口に届く正規の問い合わせに、その語が出てこないと言い切れるかを毎回確認してください。「無料」「相談」「見積」といった語は、営業の送信にも正規の問い合わせにも出てきます。止めるなら、単語ではなく、正規の送信ではまず出てこない組み合わせや、明らかに機械が使う文字列に限るのが安全です。
次に、IPアドレスで止める場合の線引きです。同じIPから短時間に大量の送信が来ているなら止める理由がありますが、1件だけを理由に止めるのは避けてください。送信元IPはメール本文に [_remote_ip] を入れておけば確認できます。止める前に、そのIPからの送信履歴が本当に1つの相手だけなのかを見てください。
3つ目に、フォームの設計そのものも関係します。任意入力欄の値をメールのヘッダに使っている場合、空欄でもヘッダが有効なままかを確認するよう公式が案内しています。また、本文を空または短くしすぎないことについては、「It not only makes the mail look like spam, it makes mail sending function fail on some hosts.」と書かれています。自分が送るメールがスパムに見える作りになっていないか、という視点も必要です。
4つ目に、回答者に求める操作の重さです。ログインや画像の文字入力を条件にすると、スパムは確実に減りますが、正規の送信も減ります。減った分は数字にしか現れず、「送るのをやめた人」として記録には残りません。応募や申し込みを受け付けるフォームでは、この見えない損失のほうが大きくなることがあります。
弾いた分をどう確かめるか
3つ目が、いちばん忘れられやすく、いちばん重要な論点です。止めた送信の中身を後から見られる状態にしてから、対策を入れてください。
前提として、Contact Form 7 は既定ではメッセージを保存しません。この状態でスパム対策を入れると、止まった送信はどこにも残りません。公式が Akismet への誤判定報告に Flamingo を要求しているのは、この構造があるからです。「To report false detections to Akismet, you need the Flamingo plugin activated because Contact Form 7 doesn't come with the ability to store submission data into the database.」保存する仕組みが無ければ、報告する対象も存在しないということです。
確かめる運用は、具体的に次の形で決めておきます。誰が、どのくらいの頻度で、どの画面を見るのか。Flamingo を入れた場合は Flamingo > Inbound Messages の Spam のリストが対象になります。応募や申し込みの締切が近い期間は毎日、平常時は週に1回、といった具合に頻度を先に決めてください。頻度を決めずに「気づいたときに見る」にすると、見なくなります。
見つけたときの扱いも決めておきます。本物が Spam のリストに入っていた場合、Status を変えて Akismet へ報告する。そのうえで送信者へ返信する。ここで問題になるのが、返信したかどうかがどこにも残らないことです。メールで届いた分は受信箱の既読状態で追えますが、管理画面から拾った分は追えません。窓口が2人以上いるなら、同じ1件に2人が返信する事故が起きます。
対応状況の記録については、公式に確認できることが限られています。問い合わせ1件ごとに担当者を割り当てる機能、対応ステータスを管理する機能、対応履歴や個別返信の記録を残す機能については、contactform7.com の Docs / FAQ および wordpress.org のプラグインページ上では確認できませんでした。Flamingo の Inbound Messages にはメッセージ一覧と検索があり、Inbox と Spam の間で Status を変更できますが、公式ページ上でこの Status が説明されているのは Akismet への誤判定報告の手順としてであり、対応状況の管理として説明されているわけではありません。機能が無いという意味ではなく、公開資料からは確認できないという意味です。
複数の担当者に届ける方法としては、Mail タブの Additional headers に Cc / Bcc を1行1件で追加する方法があり、「Adding Cc, Bcc and other mail headers」「Selectable recipient with pipes」という Docs のページが用意されています。全員に同じメールが届く形になるため、誰が返すかの決め方は運用側で用意することになります。
「届かない」と「止められた」を切り分ける
スパム対策を入れたあとに必ず出てくるのが、「送ったのに届かない」という申告です。ここで原因を取り違えると、対策を全部外して振り出しに戻ることになります。公式は、画面に出る枠の色で切り分ける方法を案内しています。
赤枠の「There was an error trying to send your message.」については、「The red border means that Contact Form 7 tried to send mail with wp_mail(), but it failed.」と説明されています。原因としては「There could be various reasons such as the mail setup wasn't valid.」「The sending would also fail if the mail server was down, inaccessible or experiencing other problems.」が挙げられており、ホスティング事業者に問い合わせてエラーログを確認してもらうよう案内されています。「In some cases, it is possible to solve this issue by using another mail server.」という記述もあります。
オレンジ枠は意味が違います。「The orange border is a sign of spam. It indicates that one of the spam protection modules has detected suspicious activity in the form submission.」スパム対策のモジュールのどれかが止めた、という合図です。どのモジュールが止めたのかは spam logging feature で判別することが推奨されています。複数の手段を組み合わせている場合、この判別ができないと、どれを緩めればよいのかが決められません。
紛らわしいのは、赤枠とオレンジ枠でユーザーに見せる文言が同じである点です。これは意図された設計で、スパム判定であることを送信者に伝えない方針であることが公式に説明されています。送信者側からは区別が付かないので、申告を受けた側が枠の色を聞き取る必要があります。
もう1つ、緑枠が出ているのに届かない場合があります。「Showing the green border message means that the PHP function for sending the mail has certainly completed successfully. So if you can't receive the mail, it's highly possible that the mail has been kidnapped or killed after that.」送信の関数は成功しているので、その先で失われている可能性が高い、という説明です。「If you can check the log of your mail server, it could give you some clues. Spam filter often causes this kind of problem.」受信側のスパムフィルタが原因になることが多いと書かれています。
申告を受けたときの聞き取り項目を、あらかじめ決めておくと早く終わります。送信したときに画面に出た表示、その色、送信した日時、使ったブラウザ。この4つが揃えば、フォーム側で止まったのか、メールの経路で失われたのかを絞り込めます。
到達率の設定は、スパム対策と同じ日に見直す
スパムを止める話と、自分が出すメールが相手に届く話は、表と裏の関係にあります。公式のベストプラクティスには、到達率を上げるための設定がまとまっています。
From については、「in the From field, use an email address that belongs to the same domain as the site.」サイトと同じドメインのアドレスを使うよう案内されています。管理画面の説明にも「This field value should be an email address that belongs to the same domain as the web site. Otherwise you'll get a configuration error.」と書かれており、違うドメインを入れると設定エラーになります。返信先を分けたい場合は、Additional headers に Reply-To を書きます。Mail と Mail (2) の両方で指定できます。
サーバ側の準備についても記載があります。「It is recommended you prepare a real wordpress@{your-site-domain} address on your host.」既定のメールテンプレートがこのアドレスを From に使うためで、「Some hosts also block outgoing mail from this address if it doesn't exist.」実在しないアドレスからの送信をブロックするホストがある、と説明されています。
認証の設定についても触れられています。「you can utilize email authentication methods including SPF and DKIM, which are supported by most major mail service providers.」主要なメールサービス事業者が対応している SPF と DKIM を利用できる、という書き方です。
自動返信を出している場合は、この設定がそのまま応募者や問い合わせ者への到達率に効きます。Mail (2) について公式は「Mail (2) is an additional mail template. It is often used as an autoresponder, but you can use it for any purpose. Mail (2) is sent only when the primary Mail has been sent successfully.」と説明しています。主のメールが成功したときだけ送られる仕組みなので、主のメールが止まっていると自動返信も出ません。「返信が来ない」という申告の裏に、自動返信が届いていないケースが混ざります。
スパム対策を入れる日に、この到達率の設定も一緒に確認してください。片方だけを触ると、あとで問題が出たときに原因の切り分けが難しくなります。
添付ファイルを受けるフォームで決めておくこと
応募書類や見積依頼など、ファイルを受け取るフォームでは、スパム対策とは別に決めておくことがあります。
フォーム側では [file] と [file*] を使います。「file* is a required field and requires the user to upload a file.」必須にする場合はアスタリスク付きです。受け付ける種類は filetypes: オプションで指定し、拡張子と MIME タイプが使えて、複数はパイプ記号で区切ります。記述例は [file your-file filetypes:pdf|txt limit:2mb] です。最大サイズは limit: オプションで、kb または mb の接尾辞が使えます。「Note that you can't use a decimal point in it (i.e., like this: [file your-file limit:1.5mb]) and it will be ignored if it exists.」小数点は使えません。
指定を省略した場合の既定値も公開されています。「The default filetypes: option value is audio/|video/|image/*, and the default limit: option value is 1mb.」音声と動画と画像だけが通り、上限は1メガバイトということです。公式は「Since these default values can change in future versions without notice, it is recommended to set the options explicitly.」と付記しており、明示的に設定することを勧めています。応募書類をPDFで受け取るつもりのフォームで指定を省略すると、既定値のままではPDFが通りません。
メールに添付する場合は、Mail タブの File attachments 欄に対応する mail-tag を入れます。複数ある場合は [your-file][your-another-file] のように並べます。ここには容量の上限があります。「Keep in mind that there is an upper limit (25 MB) on the total size of files attached to an email. You will receive a warning if your contact form configuration allows attached files that exceed this limit.」添付の合計サイズに25メガバイトの上限があり、設定がこれを超えることを許している場合は警告が出ます。あわせて「Transferring a large amount of data is not the primary purpose for which the email system is designed. You should instead use a specialized service such as Dropbox.」と、大きなデータの受け渡しには専用のサービスを使うよう案内されています。
アップロードされたファイルの扱いも把握しておいてください。処理の流れは、PHPエラーの有無を確認し、ファイル種別とサイズを検証し、問題なければ一時フォルダへ移動し、メールに添付して送信し、送信後に一時フォルダから削除する、というものです。一時フォルダの場所は「The location of the temporary folder is wp-content/uploads/wpcf7_uploads by default.」で、アップロードのパス設定を変えている場合は異なります。フォルダは自動作成されますが失敗することがあり、「The most possible reason for this is that the parent folder doesn't have sufficient writing permissions.」と説明されています。場所を変えるには定数 WPCF7_UPLOADS_TMP_DIR を定義します。サーバ上のファイルを添付する場合は、「For security reasons, specifying files outside of the wp-content directory for email attachments is not allowed」という制約があります。
スパム対策との関係で言うと、添付付きのフォームは止まったときの損失が大きくなります。送信後に一時フォルダから削除される仕組みなので、メールが止まった送信のファイルは手元に残りません。応募書類を受け取るフォームこそ、弾いた分を確認する運用を先に決めておく必要があります。
更新の前提を、運用の予定に入れておく
スパム対策を組み込むということは、その状態を維持し続けるということです。前提となるバージョンの要件を把握しておかないと、ある日プラグインが更新できなくなります。
Contact Form 7 の現行バージョンは 6.1.7、最終更新は2026年8月17日です。readme の記載値は「Requires at least: 6.7」「Tested up to: 7.1」「Requires PHP: 7.4」となっています。組み合わせて使う Flamingo は現行バージョンが 2.6.4、最終更新は2026年8月18日で、要件は同じく Requires at least 6.7、Tested up to 7.1、Requires PHP 7.4 です。ディレクトリへの登録は2007年8月2日で、長く維持されてきたプラグインです。
サポート方針は2025年12月2日付で改定が公表されています。理由として「Our current WordPress support policy (supporting down to the second latest major version) was defined based on WordPress core's previous fast-paced major update release cycle (three times per year). However, the release cycle is slowing down now, and it is planned to release only once next year.」が挙げられています。新方針は「WordPress: The latest major version (at the time of the plugin's major release) and greater.」「PHP: Versions recommended by the latest major version of WordPress.」です。
次期メジャーについての見通しも書かれています。「Contact Form 7's next major version, 6.2, will be released in the first half of 2026. The latest major WordPress version at the time will probably be 6.9; therefore, Contact Form 7 6.2 will support WordPress 6.9+. And, because WordPress 6.9 recommends PHP 8.3 or greater, Contact Form 7 6.2 will require PHP 8.3+ to work.」PHP のバージョンを上げる作業が必要になる可能性がある、ということです。この方針は「In addition to Contact Form 7, we will apply this new policy to any other WordPress plugin product we develop.」として、同じ開発元の他のプラグインにも適用されます。
受け付けている最中にサーバのPHPを上げる作業が入ると、フォームが一時的に止まるリスクがあります。応募や公募の締切の直前にこれをやらないよう、更新の予定は募集の切れ目に合わせてください。
他にも把握しておくべき前提があります。Ajax 送信は WordPress REST API を利用します。「Contact Form 7 4.8 and later versions use the WordPress REST API for Ajax submission. If the REST API isn't available on your site, you have to give up using Ajax submission. You can still use non-Ajax submission.」REST API が使えない環境では Ajax 送信をあきらめることになり、非Ajax送信モードでは wpcf7mailsent / wpcf7submit などの DOM イベントが発火しません。また、Additional Settings の on_sent_ok / on_submit は「officially removed from Contact Form 7 5.0」であり、代わりに DOM イベントを使う形になっています。古い設定を引き継いだまま運用している場合は、この2つが残っていないかを確認してください。
法令への対応については、公式が立場を明記しています。「Ultimately, no WordPress plugin in itself can provide legal compliance, and the responsibility for making your contact forms compliant with legislation lies with the user (you).」プラグイン単体で法令順守を提供することはできず、責任は利用する側にある、という説明です。個人情報を扱う受付では、この点を運用の設計に織り込んでください。判断に迷う部分は、所管の窓口や専門家に確かめてください。
受付の種類によって、止め方の重さは変わる
同じスパム対策でも、何を受け付けている窓口かによって、選ぶべき強さが変わります。1件の取りこぼしがどれくらい痛いかが違うからです。
採用の応募受付は、取りこぼしがいちばん痛い形です。応募者は他社にも応募していて、返信が遅れれば決まってしまいます。書類の添付も伴うため、止まった送信のファイルが残らない点も効いてきます。強く止めるより、通したうえで仕分けるほうが安全です。この形で必要になる項目は採用の応募受付にまとまっています。
助成金や公募の受付は、締切があることが特徴です。締切の直前に送信が集中するため、その時期にスパム対策の設定を触るのは避けてください。締切当日に弾かれた申請が1件あると、その1件だけを救済する運用が必要になります。締切と受付の設計については助成金・公募の受付を参照してください。
日常的な問い合わせ窓口は、件数の多さが問題になる形です。スパムの割合も高くなりやすく、外部サービスの判定を効かせる価値がいちばん大きい場所です。ただし、止めた分を確認する頻度を決めておかないと、埋もれた本物に気づけません。この形の詰まり方は問い合わせの受付に整理されています。
イベントや講座の申し込みは、定員と締切が絡みます。定員に達する前に弾かれた申し込みがあると、あとから繰り上げの調整が発生します。回答者に余分な操作を求めると、申し込みの途中でやめる人が出る点も無視できません。それぞれの受付の流れはイベントの申し込みと講座の受講申し込みにまとまっています。
施設利用の申請や会員の入会申し込みは、送信者が特定できている場合が多い形です。既に関係のある人だけが使う窓口なら、ログインを条件にする設計も選択肢に入ります。それぞれの受付で必要になる項目は施設利用の申請と会員の入会申し込みで扱っています。
修理やサポートの受付は、1件のやり取りが長く続く形です。最初の1通が弾かれると、そのあとの往復がまるごと始まりません。緊急性の高い連絡が混ざるため、止める強さは控えめにしておくのが無難です。この形の考え方は修理・サポートの受付にあります。
受け付けたあとの工程から見た、スパム対策の位置づけ
ここまで整理すると、スパム対策の設定そのものは、受付という仕事の一部でしかないことが見えてきます。受付は、届く、仕分ける、担当を決める、返す、終わったことを記録する、という工程でできています。スパム対策が効くのは最初の「届く」の部分だけで、残りの工程は別の仕組みで支える必要があります。
Contact Form 7 のスパム対策を入れたあとに残る作業を、工程ごとに並べてみます。届く工程では、外部サービスが判定して通ったものだけがメールで届きます。仕分ける工程では、受信箱と、Flamingo を入れた場合は管理画面のスパム一覧という、2つの場所を見ることになります。担当を決める工程では、Cc や Bcc で全員に同じメールが届くため、誰が返すかを別の手段で決めます。返す工程では、メールから返すか管理画面から拾って返すかで経路が分かれます。記録する工程については、公式ページ上で対応状況の管理として説明されている機能は確認できませんでした。
つまり、スパム対策を入れて受信箱が静かになっても、仕分けたあとの4工程は手作業のまま残ります。ここに手が回らないと、スパムが減ったのに二重返信と返し忘れは減らない、という状態になります。返信したかどうかが表に残らないと、二重返信と返し忘れは必ず起きます。
この構造をどう補うかは、受付の件数と担当の人数で決まります。件数が少なく担当が1人なら、受信箱の既読状態で十分に回ります。件数が増えるか担当が2人以上になった時点で、送信されたあとの道具がそろっているかどうかが効いてきます。具体的には、届いた1件ごとに対応状況が付き、担当を割り当てられ、返信の記録が同じ画面に残るかどうかです。
いま使っている道具のままで足りるかどうかを判断するには、公開されている仕様を並べて比べるのが早道です。同じ切り口で他の道具と比べた内容はContact Form 7との比較にまとめてあります。無料で使われることの多いGoogleフォームとの違いはGoogleフォームとの比較に、Microsoft 365 を使っている組織で選択肢になるものはMicrosoft Formsとの比較にそれぞれ整理しています。
受け付けたあとの工程に何があると回るのかを一覧で確認したい場合は、機能の一覧をまとめたできることが参考になります。画面の動きを先に見たいなら、実際の操作を確認できる動くところを見るがあります。費用の考え方は料金に、導入前によく出る疑問はよくある質問にまとまっています。
最後に、判断の順番をもう一度整理します。1つ目に、送信されたメッセージを保存する仕組みを先に用意する。2つ目に、止めたい強さを3段階のどこに置くかを決める。3つ目に、正規の送信を弾かないための線引きを、禁止語とIPについて具体的に書き出す。4つ目に、止めた分を誰がどの頻度で確認するかを決める。5つ目に、そこまで決めたうえで手段を1つずつ足していく。この順番で進めれば、静かになった受信箱を見て安心する代わりに、何を止めていて何を通しているのかを自分で説明できる状態になります。スパム対策の目的は、受信箱を空にすることではなく、本物の1件に確実に返せるようにすることです。
Q1. スパム対策はどれか1つを入れれば足りますか?
公式は「Contact Form 7 provides several spam protection modules; we recommend utilizing different types in combination.」として、種類の違うものを組み合わせて使うことを勧めています。ただし最初から全部入れると、どの設定が何を止めたのか分からなくなります。外部サービスの判定を1つ入れて様子を見て、足りなければ禁止リストを足す順番が安全です。
Q2. 誤ってスパム扱いされた問い合わせは、あとから確認できますか?
そのままでは確認できません。Contact Form 7 は既定では送信されたメッセージを保存しないためです。公式は同じ作者の Flamingo を案内しており、Flamingo > Inbound Messages で Inbox と Spam のリストを切り替えられます。Akismet へ誤判定を報告する場合も、公式の説明では Flamingo の有効化が必要とされています。
Q3. Akismet は無料で使えますか?
公式ページの記載は「If you use it on a personal blog, you can get an API key for free. For corporate or commercial sites, paid subscriptions are available.」です。個人のブログでは無料のキーが取得でき、企業や商用サイトでは有料の購読が用意されている、という説明になっています。金額の一覧は Contact Form 7 側の公開ページからは確認できませんでした。
Q4. 送信者から「エラーが出る」と言われたとき、何を聞けばよいですか?
画面に出た枠の色を聞いてください。公式によると赤枠はメール送信の失敗、オレンジ枠はスパム対策のモジュールが止めた合図です。送信者に見える文言は同じなので、色でしか区別できません。あわせて送信した日時とブラウザを聞いておくと、フォーム側で止まったのかメールの経路で失われたのかを絞り込めます。
