
WordPressの問い合わせプラグインとして有名な「ContactForm7」ですが、WordPress4.7以降、ある特定の条件下でメールの送信が行えないという不具合が発生しています。
先日、私のクライアント環境でもこの現象が確認できましたので、これを解決するための調査・対処について備忘録として残しておきたいと思います。
確認できた状況と発生したエラー
具体的にどうなったかと言うと、メールの送信ボタンをクリックすると、ボタン下でくるくると送信中の矢印が延々と回り続けて送信が完了しない、という状況に陥りました。
WEBインスペクタでエラーを見てみると、以下のようなエラーメッセージが出ていました。
Failed to load resource: the server responded with a status of 403 (Forbidden)
さらに詳細なエラーを見ていくと、どうやら「wp-join」ディレクトリ以下のアクセスができないとの内容でした。
不具合の原因調査
.htaccessファイルでアクセス制限をかけているわけでもないのに何故・・・?
色々と調べていくと、ContactForm7のバージョン4.7以降、メールの送信に「Rest API」というものが使用されるような仕様変更がありました。
「Rest API」とは、非同期処理でメールを送信するときに使うものなのですが、これが無効状態になっていると、ContactFotm7でのメール送信が途中で止まってしまう、というのが一連の現象を引き起こしているようでした。
特に無効設定にした覚えは無いんだけどな・・・
と迷いつつも調べていくと、あることが判明しました。
それは、この現象が発生した環境であるエックスサーバーでは、2017年2月から「WordPressの「REST API」に対する国外IPアドレスからのアクセスを制限」が標準化されるようになったとのこと。
なるほど、それで設定変更した覚えがないのに無効になっていたのですね。
このContactForm7の送信不具合が起きる状況は以下の通りだということが判明しました。
- ContactForm7のバージョンが4.7以降であること
- 「Rest API」の設定が無効になっていること(エックスサーバー、WPXの場合は標準設定)
不具合解消のためにやったこと
この不具合を解消してメール送信を実現するためには、エックスサーバー側で「Rest API」の設定を有効にしてあげる必要がありました。
サーバーパネルにログインし、「WordPressのセキュリティ設定」という項目を選択します。
該当するサイトのドメイン名を選択し、「Rest API アクセス権限」という項目で、デフォルトではONになっているアクセス権限をOFFにしてあげます。
これを行なった結果、不具合は無事解消されました。
さいごに
今回は取り急ぎ送信フォームを復活させるためにエックスサーバー側のアクセス権限を解除しましたが、「うちは国外でのアクセスも多いから、セキュリティ上制限を解除したくない」という方は、他の問い合わせ系プラグインに乗り換えるというのも一つの選択肢でしょう。