WordPressのお問い合わせフォーム(Contact Form 7)を設置して、通知メールをMicrosoft 365(Outlook)で受け取ろうとしたとき、
- フォームから送信しても、Outlookに届かない
- 届いても「迷惑メール」フォルダに入っている
- サイトはXserver、メールはMicrosoft 365という構成
私はこのサイト(ai-coordinator.jp)をXserverで運用しながら、メールをMicrosoft 365へ移しました。すると、フォームの通知がOutlookの受信トレイに入らず、すべて迷惑メールに振り分けられるようになりました。
原因は「なりすまし判定」です。そして、この判定はSPF・DKIM・DMARCという3つの認証を理解すれば、怖くありません。正しく認証して送れば、リアルタイムでOutlookの受信トレイに届きます。
この記事では、その仕組みと、Contact Form 7 + FluentSMTP + Microsoft 365 で確実に受信する手順を、実際に私がやった通りにまとめます。
前提環境と、この記事のゴール
前提環境は次のとおりです。
- レンタルサーバー:Xserver(WordPress設置)
- フォーム:Contact Form 7
- メール:Microsoft 365(Business Standard)
- ドメイン:ai-coordinator.jp(MXレコードはMicrosoft 365に向いている)
- 送信プラグイン:FluentSMTP(無料)
読み終えたときのゴールは3つです。
- Contact Form 7 の通知メールが、Outlookの受信トレイに届く
- 迷惑メールに振り分けられない
- なぜ届かなかったのかを、仕組みから理解している
なぜフォームメールがOutlookに届かないのか
壁は2つあります。順に見ていきます。
壁1|Xserverの「内部配送」
WordPressのフォームは、標準ではサーバー自身(PHPのmail機能)でメールを送ります。サイトがXserverにあり、宛先も同じドメイン(@ai-coordinator.jp)だと、Xserverは「これは自分の担当ドメインだ」と判断して、外に出さず内部で処理しようとします。
その結果、Microsoft 365を指しているMXレコードを無視して、メールが宙に浮きます。これが1つ目の壁です。
壁2|Microsoft 365の「なりすまし判定」
仮に内部配送を回避して外部へ送れたとしても、次の壁があります。
Microsoft 365は ai-coordinator.jp の正規のメール管理者です。そこへ、外部のXserverが「差出人:@ai-coordinator.jp」を名乗って送ってくると、「自分のドメインを外部が名乗った=なりすまし」と疑い、迷惑メールに落とします。
ここで鍵になるのが、メール認証の3点セットです。
- SPF:送信サーバーのIPが、そのドメインの許可リストに載っているか
- DKIM:メールに正しい電子署名(改ざん防止の印)が付いているか
- DMARC:SPF/DKIMの合格が、差出人ドメインと一致しているか
Xserverから直接送ると、差出人は@ai-coordinator.jpなのに、DKIM署名が無く、本人だと証明できません。だからMicrosoft 365は「なりすまし」と判断します。
逆に言えば、@ai-coordinator.jp を名乗る正当な証明(DKIM署名)を持たせて送れば、迷惑メールにならず受信トレイに届きます。 これがこの記事の核心です。
解決策は「SMTP送信」への切り替え
結論から言うと、WordPressのメール送信を、Xserverの内部送信から、Microsoft 365経由のSMTP送信に切り替えます。Microsoft 365自身から送れば、@ai-coordinator.jpは正規の送信者として認証され、なりすまし判定されません。
このためのプラグインがFluentSMTP(無料)です。
注意点が1つあります。かつては「smtp.office365.comにパスワードで接続」できましたが、Microsoftは基本認証(SMTP AUTH・アプリパスワード)を廃止し、2025年9月でアプリパスワードも終了しました。今はOAuth 2.0でしか繋げません。だからMicrosoft Entra(旧Azure AD)でアプリを登録する必要があります。ここが少し手間ですが、これが正規ルートです。
手順1|FluentSMTPをインストールする
WordPress管理画面の「プラグイン → 新規追加」で「FluentSMTP」を検索し、インストールして有効化します。
有効化するとプロバイダ選択画面が出るので、「Microsoft / Office 365」を選びます。このとき表示される「App Callback URL」を控えます。私の環境では次の値でした。
https://ai-coordinator.jp/wp-json/fluent-smtp/outlook_callback
ドメイン部分はご自身のサイトに読み替えてください。この後、この値をMicrosoft Entraのアプリに登録します。
手順2|Microsoft Entraでアプリを登録する
Microsoft Entra管理センター( https://entra.microsoft.com )にサインインし、「アプリの登録」→「新規登録」を開きます。入力は3か所です。
- 名前:FluentSMTP WordPress(任意)
- サポートされているアカウントの種類:「複数のEntra IDテナント(マルチテナント)」を選ぶ
- リダイレクトURI:プラットフォームは「Web」、値は手順1のApp Callback URL
ここで重要なのが、アカウントの種類を「マルチテナント」にすることです。FluentSMTPはログインの入口に /common を使うため、シングルテナントのままだと後で「AADSTS50194」というエラーで弾かれます。
登録すると「アプリケーション(クライアント)ID」が発行されるので、これを控えておきます。
手順3|シークレットとAPI権限を設定する
同じアプリの画面で、2つ設定します。
まず「証明書とシークレット」→「新しいクライアントシークレット」で、有効期限24か月のシークレットを作ります。作成直後に表示される「値」をコピーします。この値はこの瞬間しか表示されないので、必ずその場でコピーしてください。
次に「APIのアクセス許可」→「アクセス許可の追加」→「Microsoft Graph」→「委任されたアクセス許可」で、次の2つを追加します。
- Mail.Send(ユーザーとしてメールを送信)
- offline_access(アクセスを維持する)
追加後、「〇〇に管理者の同意を与えます」を押して同意します。この同意まで済ませておくと、次の認証がスムーズです。
手順4|FluentSMTPで認証して接続する
FluentSMTPの設定画面に戻り、次を入力します。
- Application Client ID:手順2で控えたクライアントID
- Application Client Secret:手順3でコピーしたシークレットの「値」
- 送信者メールアドレス:ai@ai-coordinator.jp(自分の送信元アドレス)
そして「Authenticate with Office365 & Get Access Token」を押します。すでにMicrosoftにサインイン済みで管理者同意も済んでいれば、一瞬でアクセスコードが返ってきます。そのコードをコピーして、FluentSMTPの「Access Token」欄に貼り付け、接続設定を保存します。
保存後、FluentSMTPの「メールテスト」で自分宛に送り、Outlookの受信トレイに届けば接続成功です。
ここでハマりやすい3つのエラー
私が実際に踏んだつまずきを、そのまま残します。
1つ目は「AADSTS50194」。アプリがシングルテナントのままだと出ます。手順2でマルチテナントに変えれば解決します。
2つ目は「Property api.requestedAccessTokenVersion is invalid」。アカウントの種類で「個人用Microsoftアカウントも含む」を選ぶと、追加のトークン設定を要求されて弾かれます。「複数のEntra IDテナント(組織のみ)」を選べば回避できます。
3つ目は「Your Access Codeの箱が空」。認証ボタンを押しても空のコード画面が出る場合、上記のテナント設定のエラーが起きています。その画面のURLに error=AADSTS... が入っているので、そこで原因を特定できます。
Contact Form 7の送信先を確認する
最後に、Contact Form 7側の「メール」タブで、送信先が自分の受信アドレス(多くは [_site_admin_email]、つまりWordPressの管理者メール)になっているか確認します。
FluentSMTPを入れると、Contact Form 7はこのプラグイン経由でMicrosoft 365から送るようになります。フォームから実際に送信して、Outlookの受信トレイに届けば完成です。
覚えておきたい運用上の注意
クライアントシークレットには有効期限があります。今のMicrosoftの上限は24か月です。期限が切れると認証が失効し、フォームメールが送れなくなります。
期限が来たら、Entraのアプリで新しいシークレットを作り、FluentSMTPの「Application Client Secret」欄を差し替えるだけです。2分で終わりますが、忘れると”ある日突然フォームが届かなくなる”事故になるので、カレンダーにリマインダーを入れておくことをおすすめします。
まとめ
- サイトはXserver、メールはMicrosoft 365という構成では、フォームメールが「内部配送」と「なりすまし判定」の2つの壁で届かなくなる。
- 迷惑メールに落ちる根本原因は、@自ドメインを名乗るのに、それを証明するDKIM署名が無いこと。
- 解決策はSMTP送信への切り替え。Microsoft 365自身から送れば正規の認証が付き、受信トレイに届く。
- 今はOAuthが必須。FluentSMTP+Entraアプリ登録が正規ルートで、マルチテナント設定を忘れるとAADSTS50194で詰まる。
「サイトはレンタルサーバー、メールはMicrosoft 365で、フォームの問い合わせが届かない」という方は、無料の30分オンライン診断で状況を一緒に確認できます。原因の切り分けから設定まで、現場で動くところまで伴走します。
この記事の技術を、現場で実装したい方へ
AI×IoTの技術顧問として、月額契約で継続伴走しています。PoC設計・技術判断・組織設計・ベンダー管理・実装支援まで、現場で動くまで一緒に進めます。受託開発(請負)ではありません。
→ AI技術顧問サービスの詳細 / 無料30分オンライン診断 / 料金一覧






LEAVE A REPLY