メインコンテンツへスキップ

Tech

Contact Form 7 でメールが届かない原因と解決法|送信ログで取りこぼしを防ぐ

WordPress定番フォーム Contact Form 7(CF7)で「問い合わせメールが届かない」「送信できたのに通知が来ない」原因を、送信できていないのか届いていないのかの切り分けから解説。
SMTP・なりすまし対策・送信ログのDB保存まで、リードの取りこぼしを止める実装手順を紹介。

Contact Form 7(CF7)はWordPressフォームの事実上の標準ですが、本番公開後に最も多いトラブルが 「問い合わせメールが届かない」 です。
フォームは正常に見えるのに管理者へ通知が来ない、自動返信が送信者に届かない——この状態を放置すると、問い合わせ=売上の入口をそのまま取りこぼします。

結論から言うと、原因の大半はCF7の設定ミスではなく、WordPressの送信方式(PHP mail)とメール認証の問題 です。
この記事では、まず「送信できていないのか、届いていないのか」を切り分け、そのうえで原因別の解決法を、手軽な順に解説します。

なぜ Contact Form 7 のメールは届かないのか

CF7はメール送信にWordPress標準の wp_mail()(実体はPHPの mail())を使います。
この方式は手軽な反面、次の理由で不達が起きやすい設計です。

  • 多くのレンタルサーバーがPHP mailの送信数・送信元を制限、またはスパム扱いする
  • 送信元アドレスがサイトのドメインと一致しないと、受信側でなりすまし判定される
  • SPF・DKIMといったメール認証が未設定だと、Gmailなどがまとめて迷惑メール送りまたは破棄する

つまり、CF7の画面上は「送信しました」と出ていても、サーバーを出た後、あるいは受信サーバーの手前でメールが消えているケースが非常に多いということです。

切り分け:メールが「送信されていない」のか「届いていない」のか

対処の前に、問題がどの段階で起きているかを必ず切り分けます。
ここを飛ばすと、SMTP設定をいじっても直らない、という遠回りになります。

  • そもそも送信されていない … フォームがエラーを返す、送信ボタンで止まる。CF7のフォーム設定・必須項目・reCAPTCHA連携のエラーが疑わしい
  • 送信はされているが届かない … 「送信ありがとうございました」は出るのに通知が来ない。サーバーの送信制限・なりすまし判定・迷惑メール振り分けが疑わしい

この切り分けを確実にする最短手段が、送信ログをデータベースに保存すること です。
ログに記録が残っていれば「送信処理までは到達している=メール配信側の問題」と即断でき、逆に記録がなければフォーム側の問題だと分かります。
ログはトラブル解決だけでなく、不達時に問い合わせ本体を残す保険にもなります(後述の解決法3)。

解決法1:SMTPで送信し、サーバーのメール制限を回避する

実装の手軽さ ★★☆

最も効果が高いのが、送信方式をPHP mailから SMTP に切り替えることです。
SMTPは認証付きの正規のメール送信経路を使うため、サーバーのPHP mail制限を回避でき、受信側の信頼度も上がります。

WordPressなら「WP Mail SMTP」などのプラグインで、Gmail・SendGrid・Amazon SES・自社メールサーバー等のSMTP情報を設定するだけで切り替えられます。
到達率を安定させたいなら、SendGridやSESのような 送信専用サービス を使うのが確実です。
無料枠でも中小サイトの問い合わせ量なら十分カバーできます。

解決法2:送信元アドレスとなりすまし対策(SPF/DKIM)を整える

実装の手軽さ ★☆☆

SMTPに切り替えても、送信元アドレスの設計を誤ると届きません。
ここが最もつまずきやすいポイントです。

  • 送信元(From)はサイトと同じドメインにするinfo@自社ドメイン のように、サイトのドメインと一致させる。gmail.com などフリーメールを送信元にするとなりすまし判定で弾かれる
  • SPFレコードを設定する … 使用する送信サーバー(SMTPサービス)をDNSのSPFに登録し、正規の送信元だと証明する
  • DKIM署名を有効にする … 送信メールに電子署名を付け、改ざんされていないことを受信側に示す

SPF・DKIMはDNSの操作を伴うため、フォーム設定に比べて難易度が上がります。
設定を誤るとメール全体が止まるリスクもあるため、自信がなければ後述のとおり専門に任せるのが安全です。
送信者を送信者本人のメールにして「返信できるように」しているケースが多いですが、それが不達の原因になっている——という取り違えは受託現場でも頻出します。
返信先は Reply-To で指定し、Fromは自社ドメインに固定するのが正解です。

解決法3:送信ログをDBに保存し、取りこぼしを止める

実装の手軽さ ★★★

配信対策と並行して必ずやっておきたいのが、送信内容のデータベース保存 です。
メールはどれだけ対策しても不達の可能性がゼロにはなりません。
ログを残しておけば、通知メールが届かなくても問い合わせ本体は管理画面に残り、リードの取りこぼしがゼロになります。

CF7は標準では送信内容を保存しません。
wpcf7_before_send_mail フックでカスタムテーブルに保存する自前実装も可能ですが、案件ごとに書いて保守するのは非効率です。
Frontierline Forms無料版 なら、設定だけでCF7の送信ログをDBに保存でき、管理画面から履歴一覧・検索・確認ができます(送信データをDBに保存する手順)。
「本当に送信されたか」の切り分けと、不達時の保険を、コードを書かずに同時に用意できます。

スパム対策や通知の条件分岐までまとめて見直すなら、別記事「Contact Form 7 のスパムと送信ログ問題を実装で解決する」も参考にしてください。

それでも届かない・DNSを触りたくないとき

ここまでの対策は技術的には自分でも実施できます。
ただし、SPF/DKIMのDNS設定はサイト全体のメールに影響し、誤ると受信もできなくなるなど失敗リスクが高い領域です。
原因の切り分けまでは終わったが確実に直したい、DNSやサーバーの設定は触りたくない、という場合はプロに任せるのが結果的に最短かつ安全です。

WordPress Plugin & 受託開発

まず「送信できているか」を可視化。直せなければ丸ごと任せる。

送信ログのDB保存・確認画面・マルチステップは、CF7拡張プラグイン Frontierline Forms の無料版で今すぐ実装できます(WordPress.org公式リポジトリで配信中・管理画面から検索1つでインストール)。通知の条件分岐やSlack/Chatwork転送が必要なら Pro 版(年額$39.99〜)を、決済画面でローンチ割引コード EARLYBIRD2026 を入力すると割引価格で導入できます。SMTP・SPF/DKIMの設定やフォーム改修ごと任せたい場合は、受託でまとめて対応します。

Frontierline Forms 無料版を入手 → メール不達・フォーム改修を相談する

まとめ

Contact Form 7 のメールが届かない原因の多くは、CF7そのものではなくWordPressの送信方式とメール認証にあります。
まず送信ログで「送信できているのか、届いていないのか」を切り分け、そのうえでSMTP送信への切り替え、送信元アドレスとSPF/DKIMの整備を行うのが王道です。
あわせて送信ログをDBに保存しておけば、万一の不達でも問い合わせ本体は残り、リードの取りこぼしを防げます。

送信ログの保存は Frontierline Forms の無料版で今すぐ始められます。
DNS・SMTPの設定まで含めて確実に直したい場合は、メール不達・フォーム改修のご相談 からお問い合わせください。

よくある質問

Q. Contact Form 7 のメールが届かないのはなぜですか? 多くはWordPressの wp_mail(PHP mail)で送られたメールが、サーバーの送信制限や受信側のなりすまし判定で弾かれているためです。
CF7の設定ミスより、サーバー・メール認証(SPF/DKIM)側が原因のケースが大半。
まず送信ログで「送信できているのか」を切り分けるのが近道です。

Q. 送信できているのに届かない場合はどうすればいいですか? SMTP送信への切り替えと、送信元アドレスをサイトのドメインに一致させたうえでSPF/DKIMを設定するのが有効です。
フリーメール(gmail.com等)を送信元にしているとなりすまし判定で弾かれやすくなります。

Q. 問い合わせを取りこぼしていないか確認する方法はありますか? 送信内容をデータベースに保存すれば、メールが不達でも問い合わせ本体が管理画面に残ります。
Frontierline Forms の無料版なら、CF7の送信ログをDBに保存でき、届いたか・取りこぼしがないかを後から確認できます。