
## この記事でわかること

- WordPressのお問い合わせフォームメールが届かない典型パターン
- `wp_mail()` のデフォルト挙動とSPF / DKIMが通らない理由
- WP Mail SMTP 等で外部SMTPに切り替える設計の選び方
- 切り替え後にSPF・DKIM・DMARCを整える実務手順

## 「お問い合わせフォームのメールが届かない」が起きる理由

Contact Form 7 / WPForms / Snow Monkey Forms などで設定したお問い合わせ通知が、特に Gmail や Outlook 宛で届かない、という相談はとても多いです。原因のほとんどは送信失敗ではなく**受信側で迷惑メール判定 or サイレント破棄**されています。

背景には WordPress 標準の `wp_mail()` 関数が PHP の `mail()` を呼ぶ仕組みがあります。**送信元はサーバーのホスト名（例: `wordpress@xs123456.xsrv.jp`）になり、自社ドメインのSPF / DKIMは適用されません**。2024年2月のGoogle、2025年5月のMicrosoftの送信者要件強化で、この構成は受信拒否される可能性が高くなりました。詳細は[Gmailにメールが届かない時の対処](/blog/gmail-not-receiving)も合わせて確認してください。

![wp_mail()と外部SMTP経由の違い](/blog/wordpress-mail-smtp-setup/wp-mail-flow.svg)

### まず確認: 本当に「届いていない」のか

本格的な切り替え作業の前に、症状の切り分けをしておきます。

1. WordPress管理画面の「送信ログ」（プラグインで取得）で送信そのものは成功しているか
2. 受信側Gmailの「迷惑メール」フォルダや「すべてのメール」を検索しても見つからないか
3. 別のメールアドレス（自社ドメイン以外、例: 社員のGmail個人）宛に送ると届くか
4. 送信元が `wordpress@<サーバーホスト名>` のような自社ドメイン以外になっていないか

`wordpress@xs123456.xsrv.jp` のような送信元になっているなら、ほぼ確実にSPF / DKIMの不整合が原因です。

![お問い合わせメール不達の切り分けツリー](/blog/wordpress-mail-smtp-setup/troubleshoot-tree.svg)

## 解決策の本筋: 外部SMTP経由に切り替える

`wp_mail()` を外部SMTPに差し替えることで、送信元アドレスを自社ドメインに揃え、その送信プロバイダのDKIM署名を載せて送ります。代表的な選択肢:

| サービス | 無料枠 | 特徴 |
| --- | --- | --- |
| Resend | 月3,000通 | DKIM自動、設定が最短 |
| SendGrid | 月100通 | 国内事例多数、配信レポート充実 |
| Mailgun | 試用枠 | API設計が綺麗、国際送信向き |
| Amazon SES | 月62,000通(EC2経由) | 安価、AWSアカウント前提 |
| Google Workspace SMTP Relay | プラン内 | 既にGWS契約があるなら有力 |

SendGrid / SES / Resend それぞれの認証手順は本シリーズで個別記事を用意しています。

## WP Mail SMTP プラグインを使う構成

最も普及しているのが [WP Mail SMTP](https://wordpress.org/plugins/wp-mail-smtp/) プラグインです。「Mailer」設定で上記サービスを選び、APIキーを登録するだけで `wp_mail()` を差し替えられます。実装上のポイント:

- **From Email**: 自社ドメインのアドレス（例: `noreply@example.co.jp`）に固定
- **Force From Email** をオンにし、Contact Form 7 等の設定で上書きされるのを防ぐ
- **From Name**: わかりやすい会社名

プラグインを使わず `phpmailer_init` フックや `wp_mail` フィルタで直接設定することも可能ですが、テーマ更新で消えるリスクがあるため、本番運用ではプラグイン構成を推奨します。

## DNS側で整えるSPF / DKIM / DMARC

切り替えただけではまだ完了ではありません。送信プロバイダのDKIMと、受信側のDMARCアラインメントを通す必要があります。

| レコード種別 | name | value の指針 |
| --- | --- | --- |
| TXT (SPF) | `@` | `v=spf1` で始め、利用するSMTPサービスのincludeを追加し `~all` で締める |
| TXT (DKIM) | サービス指定のセレクタ.\_domainkey | プロバイダが発行した公開鍵を登録 |
| TXT (DMARC) | `_dmarc` | `v=DMARC1; p=none; rua=mailto:postmaster@example.co.jp` から開始 |

注意点: 既存のホスティング業者のSPF（例: ConoHaのinclude）と新しい外部SMTPのincludeが重複すると、SPFのlookup上限10個（RFC 7208）に近づきます。**実際にどこから送るかを起点に逆算**するのが鉄則です（[SPFフラット化](/blog/spf-flattening)参照）。

DMARCは `p=none` から始め、reportを2〜4週見て問題なければ段階的に強化します（[DMARC設定ガイド](/blog/dmarc-setup-guide)）。

### 切り替え後の検証

外部から実値を引いてレコードが配信されているかを必ず確認します（[SPF設定ガイド](/blog/spf-setup-guide)、[DKIM検証ガイド](/blog/dkim-verification)）。最後に WP Mail SMTP の「Email Test」機能でGmail宛にテスト送信し、ヘッダの「Authentication-Results」で `spf=pass` `dkim=pass` `dmarc=pass` が揃えば運用可能です。Contact Form 7 / WPForms 等のフォーム本体からも実フォームを送って、自動返信・管理者通知の両方が届くことを確認してください。

### まとめ

- `wp_mail()` のデフォルトは送信元がホスト名になり、SPF / DKIMが通らない
- 解決策は外部SMTPプロバイダへの切り替え（WP Mail SMTPプラグインが標準）
- From Email を自社ドメインに固定し、Force From Email をオンに
- 送信プロバイダ側のSPF include / DKIMセレクタをDNSに反映
- 既存ホスティングのSPFと重複しないよう、送信元を起点に再設計
- 検証はGmail宛のテスト送信 + ヘッダの Authentication-Results で

## 自社の状況を確認してみませんか

設定状況がわからない方は、無料の[ドメイン診断](/diagnose)で現状をチェックできます。
DMARC・SPF・DKIM・SSLの状態が数十秒でレポートされます。
判断に迷う場合は[お問い合わせ](/contact)からご相談ください。専門家がわかりやすくサポートいたします。
