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

- Exchange Online で DKIM が反映されない・署名が付かない 5 つの典型原因
- Defender ポータルでの正しい有効化手順（公開鍵作成 → DNS → 有効化）
- PowerShell `Get-DkimSigningConfig` で状態を確認する方法

「DKIM を有効化しようとしたら『CNAME レコードが見つかりません』と出る」「有効化はできたのにヘッダに `DKIM-Signature` が付かない」——Microsoft 365 / Exchange Online で DKIM（ディーキム、DomainKeys Identified Mail）の設定中につまずくケースは多く、原因はほぼ 5 つに収れんします。Microsoft 365 全体の認証設定の流れを先に俯瞰したい方は[Microsoft 365 のメール認証設定](/blog/microsoft-365-email-auth)をご覧ください。DKIM をこれから一から設定する手順は[Exchange Online DKIM 設定の詳細手順](/blog/exchange-online-dkim-setup-detail)にまとめています。本記事は「有効化したつもりが効いていない」状態を解消するための診断ガイドです。

![Exchange Online DKIM 有効化の正しい順序](/blog/exchange-online-dkim-not-applied/dkim-enable-flow.svg)

## 正しい有効化の順序を再確認する

Exchange Online の DKIM は **「公開鍵の作成 → DNS への CNAME 公開 → ポータルで有効化」** の順で進めます。一段でも飛ばすと「公開鍵が見つかりません」「CNAME が一致しません」というエラーで止まります。

具体的には Microsoft Defender ポータルの「Email authentication settings → DKIM」で対象ドメインを選び、提示された 2 本の CNAME 値を DNS に登録してから「Sign messages for this domain with DKIM signatures」を有効化する流れです。

## 原因 1：CNAME を 1 本しか登録していない

最も多い失敗です。Exchange Online は **`selector1._domainkey` と `selector2._domainkey` の 2 本** の CNAME を同時に要求します。鍵ローテーションのために 2 セレクタを使い分けているためで、片方が欠けていると有効化トライ時に「CNAME records do not exist」で弾かれます。

DNS 管理画面で次の 2 本があるかを確認してください。

```
selector1._domainkey.example.com  CNAME  selector1-example-com._domainkey.contoso.onmicrosoft.com
selector2._domainkey.example.com  CNAME  selector2-example-com._domainkey.contoso.onmicrosoft.com
```

1 本だけ登録した状態で有効化を押すとエラーになります。もう 1 本を追加してください。

### 原因 2：CNAME の値で initialDomain がずれている

CNAME の **値（右辺）** は、テナント作成時の **初期ドメイン（`<テナント名>.onmicrosoft.com`）** を含みます。たとえばテナント `contoso.onmicrosoft.com` で `example.com` の DKIM を有効化する場合、値は `selector1-example-com._domainkey.contoso.onmicrosoft.com` です。ここを `example.com` のまま書くと Defender 側の検証で必ず落ちます。Defender ポータルの「Copy」ボタンから貼り付けるのが最も安全です。

### 原因 3：公開鍵を作る前に有効化を押している

ドメインを Microsoft 365 に追加した直後は、DKIM 用の公開鍵がまだ生成されていません。この状態で「キーを有効化」を押すと「No DKIM keys saved for this domain」エラーになります。先に「Create DKIM keys」で公開鍵ペアを生成し、表示された 2 本の CNAME 値を DNS に登録してから Enable に切り替えてください。

PowerShell で行う場合は `New-DkimSigningConfig -DomainName example.com -KeySize 2048 -Enabled $false` を先に実行し、CNAME 反映後に `Set-DkimSigningConfig -Identity example.com -Enabled $true` を実行します。鍵長は新規なら 2048 bit を選びます。

### 原因 4：DNS 伝播前に有効化を試みている

CNAME を登録した直後は、DNS のキャッシュが切れるまで Microsoft 側からは新しい値が見えません。キャッシュが切れる前に「有効化」を押すと当然 fail します。

目安として **30 分〜数時間** 待ち、`dig CNAME selector1._domainkey.example.com +short` が `selector1-example-com._domainkey.contoso.onmicrosoft.com` を返すことを確認してから有効化してください。Windows なら `Resolve-DnsName` でも可能です。クエリの詳細は[DKIM の確認コマンド](/blog/dkim-check-commands)で扱っています。TTL が長いゾーンでは、前日のうちに CNAME を仕込んでおく運用が安全です。

## 原因 5：Connector や送信元が署名対象から外れている

DKIM 自体は有効なのに、特定の経路から送ったメールだけ署名が付かないこともあります。代表例は、複合機やマーケティングツール（HubSpot、Marketo 等）から `example.com` 名義で送っているが SMTP は外部経由、というケースです。

DKIM 署名が付くのは Exchange Online を出口として通るメールだけです。外部 SaaS から直接送る場合は、その SaaS 側で DKIM を別セレクタとして設定する必要があります。ヘッダに `DKIM-Signature: ... d=example.com; s=selector1;` が乗っているか、テスト送信して `Authentication-Results` を確認するのが最終チェックです。

## 確認用 PowerShell コマンド

設定が反映されているかは Exchange Online PowerShell から一発で確認できます。

```powershell
Connect-ExchangeOnline
Get-DkimSigningConfig -Identity example.com | Format-List
```

注目すべきプロパティは次の 3 つです。

- `Enabled`: `True` になっていること
- `Status`: `Valid` であること（`CnameMissing` の場合は CNAME 不備）
- `Selector1CNAME` / `Selector2CNAME`: ポータルが要求している値と一致していること

`Status: CnameMissing` のままなら原因 1〜2 のいずれか、`Enabled: False` のままなら原因 3 です。

![DKIM が反映されないときの切り分け](/blog/exchange-online-dkim-not-applied/dkim-troubleshoot-tree.svg)

DKIM のセレクタという概念そのものから整理したい場合は[DKIM セレクタとは何か](/blog/dkim-selector-explained)もあわせてご覧ください。Microsoft 公式の手順は [Microsoft Learn: Use DKIM to validate outbound email](https://learn.microsoft.com/microsoft-365/security/office-365-security/email-authentication-dkim-configure) で確認できます。

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

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