サイトにお問い合わせフォームを設置したのに、何週間も一件も連絡が来ない。
「まだ知られていないだけかな」と思っていたら、実は送信はされているのにメールだけが届いていなかった。
WordPressサイトで、驚くほどよくある事故です。
え、ほな今まで来た問い合わせ、全部どっか行ってしもたってこと…?
怖いのは、エラーが出ないまま静かに失われる点です。
送信した人の画面には「送信しました」と表示されるため、送った側も気づけません。
この記事では、原因を切り分ける手順と、6つの原因別の対処法、そして根本的に解決する方法まで順番に解説します。
こんな人におすすめ
「フォームからのメールが届かない・届いたり届かなかったりする」
「そもそも届いているのか確認したことがない」
「SMTPという言葉は聞くが、何をすればいいか分からない」
まず最初にやる3つの切り分け
原因を探す前に、「送れていない」のか「届いていない」のかを分けます。
この2つはまったく別の問題で、対処法も変わります。
1. 自分でテスト送信してみる
実際にフォームから自分宛に送信します。
このとき、複数の宛先で試すのが重要です。
Gmail、サイトと同じ独自ドメインのアドレス、プロバイダのアドレスなど、種類の違うものを2〜3個用意してください。
特定の宛先にだけ届かないなら、受信側のフィルタが原因だと絞り込めます。
2. 迷惑メールフォルダを確認する
拍子抜けするようですが、実際にはこれが最多です。
受信箱だけでなく、迷惑メール・ゴミ箱・プロモーションタブまで確認してください。
メールソフトを使っている場合は、サーバー側のWebメールでも確認します。ソフトに落ちてくる前に振り分けられていることがあります。
3. 送信完了メッセージが出るか見る
送信ボタンを押したあとの画面表示で、問題の場所が分かります。
| 画面の表示 | 状況 | 疑うところ |
|---|---|---|
| 「送信しました」と出る | WordPressは送信処理を終えている | 配送・受信側の問題(原因①〜③) |
| エラーが表示される | 送信処理そのものが失敗している | 設定・サーバー・プラグイン(原因④〜⑥) |
| 何も起きない・ぐるぐる回る | JavaScriptやプラグインの不具合 | 原因⑥ |
ここまでで方向が決まったら、該当する原因を順に見ていきます。
そもそもWordPressはどうやってメールを送っているのか
原因を理解するために、仕組みを1分だけ押さえておきます。
WordPressのメール送信は、wp_mailという関数が担当しています。
Contact Form 7などのフォームプラグインも、最終的にはこの関数を呼び出しています。
そしてwp_mailは、標準ではサーバーのPHPが持つメール送信機能をそのまま使います。
ここに問題があります。
この方法は、メールソフトからメールを出すのと違って認証を伴わない送信です。
受信側から見ると「誰が送ったか保証されていないメール」に見えやすく、迷惑メール判定を受けやすくなります。
送信元アドレスが自動で決まってしまう
さらに、送信元アドレスを指定しなかった場合、WordPressはwordpress@サイトのドメインという形式のアドレスを自動的に使います。
公式ドキュメントにも、実在しないアドレスからの送信をブロックするサーバーがあると明記されています。
つまり「作った覚えのないアドレスから、認証なしで送られてくるメール」という、かなり怪しい状態で飛んでいるわけです。
そら弾かれるわ…。こっちが悪いことしてるみたいやん。
原因①:迷惑メールとして振り分けられている
先ほどの仕組みからも分かるとおり、フォームからのメールはもともと迷惑メール判定を受けやすい性質を持っています。
とりあえずの対処としては、受信側で送信元ドメインを許可リストに追加します。
ただしこれは自分の受信箱だけの対処である点に注意してください。
自動返信メールを設定している場合、問い合わせをくれた相手側でも同じことが起きています。
相手の受信箱は設定できないので、根本的には後述のSMTP化まで進む必要があります。
原因②:送信元アドレスがサイトのドメインと違う
これは設定で直せる原因のうち、もっとも多いものです。
Contact Form 7の公式ドキュメントでは、送信元(From)には、そのサイトと同じドメインのメールアドレスを使うべきとされています。
それ以外のアドレスを指定すると、設定エラーとして警告が表示されます。
やりがちな間違い
送信元に、問い合わせてきた人のアドレスを入れてしまうパターンです。
【間違い】
送信元 (From): [your-email]
【正しい】
送信元 (From): info@example.com
追加ヘッダー: Reply-To: [your-email]Plaintext返信しやすいようにと考えて[your-email]をFromに入れる気持ちは分かりますが、これは自分のサーバーから他人になりすまして送っている状態です。
受信側から見れば典型的な詐称メールの形なので、弾かれて当然ということになります。
返信先を相手のアドレスにしたい場合は、Fromは自分のドメイン、Reply-Toに相手のアドレスと分けるのが正解です。
この形なら、受信したメールで「返信」を押すと相手のアドレス宛に返信できます。
原因③:SPFやDKIMが設定されていない
ここは少し専門的ですが、近年もっとも影響が大きくなっている原因です。
SPFとDKIMは、ざっくり言えば「このドメインからのメールは本物です」と証明するためのDNSの設定です。
DNSそのものが曖昧な方は、こちらの記事から読むと理解しやすくなります。

Gmailの送信者ガイドラインが厳しくなった
Googleは「メール送信者のガイドライン」で、すべての送信者に対してSPFまたはDKIMの設定を求めています。
あわせて、有効な逆引きDNSレコードを持つこと、TLS接続で送信すること、迷惑メール率を0.3%未満に保つことなども挙げられています。
さらに1日5,000件以上を送る送信者には、SPF・DKIM・DMARCのすべてと、Fromヘッダーのドメインを認証ドメインと一致させることが求められます。
個人サイトのフォームが5,000件を超えることはまずありませんが、基本要件のほうは全員が対象です。
SPFやDKIMは、多くのレンタルサーバーでは管理画面から数クリックで有効にできます。
契約中のサーバーのマニュアルで「SPF」「DKIM」を検索し、有効になっているかを確認してみてください。
原因④:フォーム側の設定ミス
ごく単純なミスも、意外と見落とされます。
- 送信先(To)のアドレスが1文字間違っている
- すでに使っていない古いアドレスのまま放置されている
- フォームを複製したときに、送信先を変え忘れている
- 制作会社が設定したままで、担当者が変わって誰も受け取っていない
とくにサイトを引き継いだ場合は、送信先アドレスを最初に確認してください。
前任者のアドレスに送られ続けている、という事態は珍しくありません。
原因⑤:サーバー側でメール送信が制限されている
迷惑メールの踏み台にされることを防ぐため、PHPからのメール送信を制限しているサーバーがあります。
また、1時間あたりの送信数に上限を設けているサーバーも一般的です。
この場合、普段は届くのに特定のタイミングだけ届かないという、もっとも厄介な症状になります。
サーバーのマニュアルで送信制限を確認し、制限があるならSMTPでの送信に切り替えるのが確実です。
原因⑥:プラグインの不具合やPHPエラー
送信ボタンを押しても反応がない、エラーが出る、という場合はこちらです。
よくあるのは次のパターンです。
- キャッシュ系プラグインがフォームの動作を妨げている
- セキュリティ系プラグインが送信をブロックしている
- reCAPTCHAの設定が正しくなく、送信が中断されている
- テーマやプラグインのPHPエラーで処理が止まっている
切り分けの基本は、プラグインを一つずつ停止して試すことです。
エラーの内容そのものを確認したい場合は、デバッグモードを使います。

根本的な解決策:SMTPで送る
ここまでの原因の多くは、SMTPでの送信に切り替えるだけでまとめて解決します。
フォームのメールが届かないという相談の、最終的な着地点はほぼここです。
SMTPにすると何が変わるのか
SMTPは、メールソフトがメールを送るときと同じ手順です。
メールアカウントのIDとパスワードで認証してから送るため、送信元が実在することが保証されます。
| 標準のまま(PHPのメール機能) | SMTP | |
|---|---|---|
| 認証 | なし | あり(IDとパスワード) |
| 送信元アドレス | 実在しないアドレスになりがち | 実在するアドレス |
| 迷惑メール判定 | 受けやすい | 受けにくい |
| 送信の記録 | 基本的に残らない | 送信済みフォルダやログに残せる |
WordPressの公式ドキュメントでも、phpmailer_initというフックを使ってSMTPの設定ができることが示されています。
ただし自分でコードを書く必要はなく、SMTP設定用のプラグインを入れるのが一般的です。
どのアカウントで送るか
SMTPを使うには、送信に使うメールアカウントが必要です。選択肢は3つあります。
| 使うもの | 向いているケース | 注意点 |
|---|---|---|
| レンタルサーバーの独自ドメインメール | 個人サイト・小規模サイト | 設定が最も簡単。送信数の上限は要確認 |
| Google Workspaceなどのメールサービス | すでに業務で使っている場合 | アプリ用のパスワードなど、追加の設定が必要なことがある |
| メール配信専門のサービス | 送信数が多い・確実性を最優先する場合 | 無料枠を超えると費用が発生する |
個人サイトなら、まずはサーバーの独自ドメインメールで試すのが現実的です。
すでにSPFやDKIMがそのサーバーで設定されていれば、認証面もそろいます。
設定するときの注意点
SMTPの設定では、メールアカウントのパスワードをWordPress側に保存することになります。
そのため、フォーム送信専用のメールアカウントを1つ作り、そのアカウントを使うほうが安全です。
普段使いのメインアカウントの認証情報を入れるのは避けてください。
送信専用のアカウント作ってから設定するんやな。メモしとこ。
二度と気づかずに失わないための予防策
直したあとが本題です。
この事故の本質は、壊れても誰も気づけない仕組みになっていることにあります。
送信内容をサイト側にも保存する
フォームの送信内容をデータベースに保存するプラグインを入れておくと、メールが届かなくても内容そのものは残ります。
問い合わせを取りこぼす最悪の事態を防げるので、優先度は高い対策です。
定期的に自分でテスト送信する
月に1回でも構いません。カレンダーに登録して、自分でフォームから送ってみてください。
サーバーの仕様変更やプラグインの更新で、ある日突然届かなくなることは実際に起こります。
自動返信を設定して、相手側の到達も確認する
自動返信メールを設定しておけば、送信者にも控えが届きます。
テストのときに自分のGmailなど外部アドレスで受け取ってみることで、相手側での到達状況も確認できます。
まとめ
フォームのメールが届かないときは、まず「送れていない」のか「届いていない」のかを切り分けます。
「送信しました」と表示されるなら、配送や受信側の問題です。迷惑メールフォルダ、送信元アドレス、SPFやDKIMの順に確認します。
エラーや無反応なら、フォームの設定・サーバーの制限・プラグインの不具合を疑います。
そして原因が複数にまたがっていることも多いため、迷ったらSMTP化してしまうのが結局いちばん早いという結論になりがちです。
最後にもうひとつ。問い合わせが「来ていない」のではなく「届いていない」可能性を、一度は疑ってみてください。
WordPressで起きやすいトラブル全般については、こちらにまとめています。

帰ったらすぐ自分のフォームからテスト送信してみるわ。ちょっと怖いけど。
よくある質問
- メールが届きません。まず何を確認すればいいですか?
-
迷惑メールフォルダの確認と、自分でのテスト送信です。このとき、Gmailと独自ドメインなど種類の違う宛先を2〜3個使ってください。特定の宛先にだけ届かないのか、どこにも届かないのかで、原因の範囲が大きく絞れます。
- 「送信しました」と表示されるのに届かないのはなぜですか?
-
その表示は「WordPressが送信処理を終えた」という意味でしかなく、相手に届いたことを保証するものではないためです。配送の途中で破棄されているか、受信側で迷惑メールに振り分けられている可能性が高くなります。
- 送信元アドレスに、問い合わせてきた人のアドレスを入れてはいけませんか?
-
入れないでください。Contact Form 7の公式ドキュメントでも、送信元にはサイトと同じドメインのアドレスを使うべきとされています。他人のアドレスをFromに入れるのはなりすましと同じ形になり、迷惑メール判定の大きな原因になります。返信先を相手にしたい場合は、追加ヘッダーのReply-Toを使ってください。
- SMTPプラグインは必ず入れたほうがいいですか?
-
問い合わせを取りこぼしたくないなら、入れておくことをおすすめします。標準の送信方法は認証を伴わないため、設定を正しく直しても迷惑メール判定のリスクが残ります。SMTPにすれば送信元が実在するアドレスになり、到達率が安定します。
- SPFやDKIMは自分で設定しないといけませんか?
-
多くのレンタルサーバーでは管理画面から有効にできます。Googleのメール送信者のガイドラインでは、すべての送信者に対してSPFまたはDKIMの設定が求められています。契約中のサーバーのマニュアルで「SPF」「DKIM」を検索し、有効になっているか確認してください。
- 届くときと届かないときがあります。
-
サーバーの送信数制限に達している可能性があります。1時間あたりの送信数に上限を設けているサーバーは一般的です。この症状はもっとも原因を特定しにくいため、サーバーの仕様を確認したうえで、SMTPでの送信に切り替えるのが確実です。