【保存版】Contact Form 7のメールがMicrosoft 365(Outlook)に届かない原因と解決手順|FluentSMTP設定

【保存版】Contact Form 7のメールがMicrosoft 365(Outlook)に届かない原因と解決手順|FluentSMTP設定

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分オンライン診断料金一覧

About The Author

Hideki
東京大学発AIスタートアップでロボット開発室室長・画像解析室室長・動画解析室室長を務め、画像認識関連のAI特許を在籍中に3件取得。その後、KDDIグループでプロダクトリーダーとして自然言語処理パッケージの自社開発を経て、現在はAGRIST株式会社の執行役員CTO 兼 VPoEとして、農業の人手不足解決に向けた収穫ロボットの開発組織を統括しています。AI・ハード・エレキ・通信・クラウド・IoTまでを一気通貫で設計できる視点を強みに、性能だけでなく「感動やワクワク体験」までデザインできるロボットの研究を進めています。並行して、AI coordinatorとして企業のAI導入・教育機関のAI授業・地域の技術相談を月額契約で継続伴走しています。

LEAVE A REPLY

*
*
* (公開されません)