お問い合わせフォーム「メール届かない・スパム対策」を一気に解決 ─ Gmail SMTP × Cloudflare Turnstileの設定手順

WordPress でサイトを運営している方なら、一度はこんな経験ありませんか?
「お客様からの問い合わせメール、実は届いていなかった…」
「フォームから毎日大量のスパムが入って、本物のお問い合わせを見つけるのに苦労する」
筆者は、自社で運営しているWordPressサイトで、まさにこの2つの問題に同時に直面しました。本記事では、この2つの悩みを 同時に・無料で・実用的に 解決するために実際に導入した方法を、手順とともに丁寧に解説します。
採用した解決策はこの2つ:
- Gmail SMTP(Workspace App Password 利用) ── メール到達率を 40%→99%以上 に
- Cloudflare Turnstile ── reCAPTCHA に代わる新世代スパム対策
どちらも 無料 で、ユーザー体験を損なわず に導入できます。
第1章:なぜフォームメールは届かないのか
WordPress の標準メール送信機能 wp_mail() は、サーバーから直接メールを送る方式です。これにはいくつか問題があります。
主な原因
| 原因 | 説明 |
|---|---|
| SPFレコード未設定 | 送信元IPが「正規」と認められず、Gmail等が受信拒否 |
| DKIM署名なし | 改ざん検知の電子署名がないため、スパム判定されやすい |
| 共用サーバーの IPブラックリスト入り | 他の利用者のスパム送信で、サーバー全体が「悪質」認定されている |
| 送信元アドレスとドメイン不一致 | wordpress@example.com のような擬似アドレスで送信され、信頼度が低い |
これらの結果、メールが受信側のスパムフォルダに入る、もしくは完全に拒否されるという事態が起きます。
解決方針:SMTP外部経由送信
WordPress の wp_mail() を、外部の信頼できるメールサーバー経由で送るようにすれば、これらの問題は一気に解消します。今回採用したのは Google Workspace の Gmail SMTP。なぜなら:
- Googleの高い送信ドメインレピュテーションが使える
- SPF・DKIM が自動で適切に設定される
- 既に Workspace 契約していれば追加費用ゼロ
- 送信ログが Gmail の「送信済み」フォルダに残る
第2章:reCAPTCHA より Cloudflare Turnstile が良い3つの理由
スパム対策といえば長年 Google の reCAPTCHA が定番でしたが、近年は Cloudflare Turnstile がより優れた代替として注目されています。
比較表
| 項目 | reCAPTCHA v3 | Cloudflare Turnstile |
|---|---|---|
| 料金 | 無料(一定枠超過は有料) | 完全無料・利用上限なし |
| プライバシー | Google にトラッキングデータ送信 | ユーザートラッキングなし |
| ユーザー体験 | 「私はロボットではありません」表示 | 不可視・操作不要 |
| 設定の手間 | キー発行+プラグイン | 同等 |
| 検証精度 | 高い | 同等以上 |
Turnstile を選ぶ理由
- GDPR/個人情報保護法の観点で安心 ── ユーザーをトラッキングしないため、プライバシーポリシーの記載負担が軽い
- ユーザーが「ロボットチェック」を意識せずに送信できる ── 離脱率の低下
- 無料で利用上限なし ── サイト規模が拡大しても課金不要
第3章:今回採用する全体構成
[ユーザー]
↓ フォーム入力
[WordPress フォーム]
↓ Turnstile トークン検証 ← ① Cloudflare Turnstile
↓ 検証成功
[wp_mail() 呼び出し]
↓ Gmail SMTP 経由 ← ② Gmail Workspace
[管理者の Gmail 受信箱]
✉️ SPF=pass / DKIM=pass で着信
スパム対策と到達率改善を 2層で実現する構成です。
第4章:Gmail SMTP 設定手順
Step 1:Google Workspace アプリパスワードを発行
前提:使用する Google アカウントに 2段階認証が有効になっている必要があります。
- Google アカウントのアプリパスワード設定ページにアクセス
- ログイン中の Google アカウント(フォームメールを送信したいアドレス)を確認
- アプリ名 に任意の識別名を入力(例:
WordPress SMTP) - 作成 をクリック
- 生成された 16文字のパスワード が画面に表示される(
xxxx xxxx xxxx xxxx形式) - このパスワードを安全な場所にコピーしておく(再表示できないため注意)
⚠️ このパスワードは絶対に外部に漏らさないこと。GitHubなどの公開リポジトリに誤って入れると即時悪用されます。
Step 2:WordPress に Gmail SMTP を組み込む
実装方法は2通り:
方法A:プラグイン採用(簡単・推奨)
人気プラグイン「WP Mail SMTP by WPForms」が定番です。400万サイト以上で利用されており、Awesome Motive 社(WPForms運営)が活発に開発を継続しています。
- WordPress 管理画面 → プラグイン → 新規追加
- 「WP Mail SMTP」で検索 → インストール → 有効化
- 設定画面で:
– Mailer: Other SMTP(または Gmail を直接選択)
– SMTP Host:smtp.gmail.com
– SMTP Port:587
– Encryption: TLS
– Auto TLS: ON
– Authentication: ON
– SMTP Username: あなたのGoogleアカウント(フルアドレス)
– SMTP Password: Step 1 で取得した16文字
– From Email: 同上
– From Name: 任意(サイト名等) - 保存 → 「Email Test」タブからテスト送信
方法B:自前 PHP 実装(プラグイン極小派向け)
wp-config.php に定数を定義:
define('SMTP_HOST', 'smtp.gmail.com');
define('SMTP_PORT', 587);
define('SMTP_USER', 'your-account@example.com');
define('SMTP_PASS', '(16文字のアプリパスワード)');
wp-content/mu-plugins/ 配下に SMTP 設定 mu-plugin を配置し、phpmailer_init フックで PHPMailer に上記設定を投入。
⚠️ セキュリティの鉄則
– 認証情報は コードに直接書かない
–wp-config.phpまたはwp_optionsテーブルに保管
– Git管理ディレクトリ外、または.gitignoreに登録
Step 3:動作確認
WordPress の管理画面か実際のフォームから1通送信し、受信した側の Gmail で メッセージのソースを表示:
Authentication-Results: spf=pass (...)
Authentication-Results: dkim=pass (header.d=gmail.com)
Received: from ... by smtp.gmail.com ...
この3行が確認できれば成功です。
第5章:Cloudflare Turnstile 設定手順
Step 1:Cloudflare アカウントを作成
Cloudflare アカウントがない方は Cloudflare サインアップページで作成(無料)。
Step 2:Turnstile のサイト登録
- Cloudflare ダッシュボードの Turnstile セクションにアクセス
- Add site をクリック
- 以下を入力:
– Site name: 任意の管理名
– Hostname: あなたのサイトドメイン(例:example.com)
– Widget Mode: Managed(推奨・標準)
– Pre-Clearance: OFF でOK - Create をクリック
- 生成された Site Key(公開キー)と Secret Key(秘密キー)の2つをコピー
Step 3:WordPress に組み込む
フロントエンド側
フォームのHTMLに以下を追加:
<!-- ページの <head> または </body> 直前 -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<!-- フォーム内(送信ボタンの直前) -->
<div class="cf-turnstile" data-sitekey="(取得したSite Key)"></div>
サーバーサイド側
フォーム送信時に、Cloudflare API でトークン検証:
$token = $_POST['cf-turnstile-response'] ?? '';
$secret = '(取得したSecret Key・wp_optionsから読み込み推奨)';
$response = wp_remote_post('https://challenges.cloudflare.com/turnstile/v0/siteverify', [
'body' => [
'secret' => $secret,
'response' => $token,
'remoteip' => $_SERVER['REMOTE_ADDR'],
],
]);
$body = json_decode(wp_remote_retrieve_body($response), true);
if (empty($body['success'])) {
wp_die('スパム判定によりフォーム送信がブロックされました');
}
Secret Key の保管も鉄則
–wp-config.php定数 orwp_optionsDB
– コード内ハードコーディング厳禁
– Git管理対象外
Step 4:動作確認
- シークレットウィンドウでフォームページを開く
- Turnstile のウィジェットが表示される(一瞬チェック動作)
- 入力 → 送信 → 成功
- わざと Secret Key を誤った値で投入し、失敗パターンも確認
第6章:SPF / DKIM / DMARC 仕上げチェック
Gmail SMTP を使えば自動で SPF・DKIM は通りますが、独自ドメインからのメールを送りたい場合は追加設定が必要です。
| 項目 | 確認方法 |
|---|---|
| SPF | DNSに v=spf1 include:_spf.google.com ~all を追加 |
| DKIM | Google Workspace 管理コンソールで DKIM を有効化+公開鍵を DNS に登録 |
| DMARC | DNSに v=DMARC1; p=none; rua=mailto:postmaster@example.com を追加 |
確認には MXToolbox や mail-tester.com が便利です。10点満点でスコアが出ます(9点以上目標)。
まとめ:2つの仕組みで運営が劇的にラクに
| Before(導入前) | After(導入後) |
|---|---|
| ❌ お客様からのメールが届いていない | ✅ 99%以上の到達率 |
| ❌ 毎日100通のスパムを手動で振り分け | ✅ Turnstile が自動ブロック |
| ❌ reCAPTCHA で離脱が増加 | ✅ 不可視 Turnstile で離脱ゼロ |
| ❌ メールサーバーの管理に悩む | ✅ Google Workspace 任せ |
実装の難易度はそれほど高くなく、プラグイン使用なら 30分・自前実装でも2〜3時間 で完了します。
筆者の運営サイトでは、この組み合わせ導入後、お問い合わせ取りこぼしゼロ・スパム手動振り分け作業ほぼゼロを実現しました。同じ悩みを持つ運営者の方の参考になれば幸いです。
