JavaScriptの二重読み込み
テーマや他のプラグインが原因で、Contact Form 7の送信スクリプトが複数回読み込まれることがあります。
その結果、送信処理が二重に走り、同じメールが2通届くケースがあります。
ユーザー操作による多重送信
送信ボタンを連打してしまったり、通信が遅れて再度クリックされると、複数回送信されてしまうことがあります。
通常は送信ボタンが自動的に無効化されますが、JavaScriptエラーやキャッシュの影響で機能しない場合があります。
キャッシュ系プラグインやCDNの影響
サイト高速化のために導入したキャッシュ系プラグイン(Autoptimize、LiteSpeed Cacheなど)やCDNの設定が原因で、フォーム送信処理が二重化することがあります。
特に「JavaScriptの遅延読み込み」や「最適化」の設定は要注意です。
メール設定の二重化
Contact Form 7には「メール」と「メール(2)」という2種類の送信設定があります。
「メール(2)」が有効になっていると、意図せず2通送信される場合があります。
サーバー側のタイムアウトやリトライ
フォーム送信時にサーバーがタイムアウトすると、自動的に再送処理が走ることがあります。
その結果、メールが2通届くことがあるため、サーバー環境の影響も見逃せません。
解決方法
テーマやプラグインの競合をチェック
一度テーマをデフォルト(Twenty Twenty-Fourなど)に切り替え、他のプラグインを停止してみましょう。
二重送信が止まれば、競合が原因です。
メール(2)をオフにする
管理画面の「メール」タブにある「メール(2)」を確認し、不要なら無効化しましょう。
送信ボタンの多重クリックを防ぐ
もし送信ボタンが無効化されない場合は、以下のようなスクリプトを追加するのも有効です。
document.addEventListener('wpcf7submit', function(event) {
const submitButton = event.target.querySelector('input[type="submit"]');
if (submitButton) {
submitButton.disabled = true;
}
}, false);
キャッシュ系プラグインの設定を見直す
キャッシュや最適化プラグインを使っている場合は、Contact Form 7のページをキャッシュ除外に設定するか、JavaScriptの遅延読み込みを無効にしてみましょう。
サーバー環境を確認する
サーバーログを確認し、タイムアウトや再送が原因であれば、サーバーの安定性改善や移行を検討する必要があります。
まとめ
Contact Form 7で同じメールが2通届く原因は、
- JavaScriptの二重読み込み
- ユーザー操作による多重送信
- キャッシュ系プラグインやCDNの影響
- メール(2)の設定
- サーバー側のリトライ
といった複数の要因が考えられます。
「なぜ2通送られてしまうのか」を一つずつ切り分けながら確認すれば、解決できるかと思います。