SPF・DKIM・DMARCはどこで効く? ― メール1通の流れに3つを重ねて理解する

Microsoft 365・Azureカテゴリを表すパンダのイラスト Microsoft 365・Azure

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。SPFのRFC 7208、DKIMのRFC 6376、2026年に公開されたDMARCのRFC 9989、およびMicrosoft 365の最新Email認証資料を確認して整理しています。

検証ステータス:📘 現行RFC・Microsoft 365公式情報確認済み・PowerShell DNS確認サンプル実装済み・実行確認は未実施

SPF・DKIM・DMARCはどこで効く? ― メール1通の流れに3つを重ねて理解する

SPF、DKIM、DMARCは同じ認証を3回しているわけではありません。SPFは主に送信元IPとMAIL FROM側のドメイン、DKIMは署名したドメインとメッセージ、DMARCは利用者に見えるFromドメインとSPF/DKIMの認証結果のalignmentを結び付ける役割があります。

2026年時点でDMARCを調べるときは、旧RFC 7489ではなくRFC 9989を基準にします。RFC 9989はRFC 7489とRFC 9091をobsoleteにしています。

1通のメールに重ねる

sequenceDiagram
    participant S as Sending server
    participant D as DNS
    participant R as Receiving server
    participant U as User

    S->>R: SMTP message
    R->>D: SPF: MAIL FROM側ドメインの許可情報を確認
    D-->>R: SPF policy
    R->>D: DKIM: d=署名ドメインの公開鍵を確認
    D-->>R: DKIM public key
    R->>R: SPF/DKIMの認証結果を評価
    R->>D: DMARC policyを確認
    D-->>R: DMARC policy
    R->>R: Fromドメインとのalignmentを評価
    R-->>U: 最終的な配送・処理

SPFは「From欄そのもの」を認証しない

SPFは、受信したSMTP接続元が、対象ドメインのメールを送ることを許可されているかをDNSのSPFレコードで確認します。RFC 7208では、チェック対象となるidentityとしてMAIL FROMやHELOが扱われます。

ここで重要なのは、メールソフトに表示される From: ヘッダーとは別の層だということです。Microsoft 365の公式説明でも、SPF単体ではMAIL FROMドメインとFromドメインのalignmentを確認しない点が説明されています。

DKIMはメッセージへ署名する

DKIMでは送信側がメッセージへ暗号学的署名を付け、受信側はDNSで公開鍵を取得して検証します。署名には d= で署名ドメインが示されます。

これにより、署名対象となったヘッダーや本文が署名後に不正に変更されていないかを確認できます。ただし、DKIMに通っただけでは、その d= ドメインが利用者に見えるFromドメインと同じとは限りません。

DMARCはFromドメインとのalignmentを見る

DMARCでは、RFC 5322の From: ドメインを中心に、SPFまたはDKIMで認証されたドメインとのalignmentを評価します。

ざっくり整理すると次の関係です。

仕組み主に見るものDMARCとの関係
SPFSMTP送信元とSPF identity認証済みSPFドメインがFromドメインとalignmentするか
DKIM署名と d= ドメイン認証済みDKIM署名ドメインがFromドメインとalignmentするか
DMARCFromドメイン、SPF/DKIM結果、policyalignmentを含めてDMARC pass/failを判断

DMARCはさらに、ドメイン所有者が公開したpolicyやreportingの仕組みを持ちます。

すぐ試す:自分のドメインのDNSを読んでみる

仕組みを読むだけでなく、公開DNSに何が載っているかをPowerShellで確認できます。以下は参照だけで、DNS設定は変更しません。

SPF候補となるドメイン直下のTXT:

Resolve-DnsName -Name example.com -Type TXT

DMARC:

Resolve-DnsName -Name _dmarc.example.com -Type TXT

DKIMはselectorが必要です。たとえば selector1 を使う環境なら、Microsoft 365のようにCNAME委任されている場合も考えて、まずCNAMEを確認できます。

Resolve-DnsName -Name selector1._domainkey.example.com -Type CNAME
Resolve-DnsName -Name selector1._domainkey.example.com -Type TXT

example.comselector1 は自分の環境へ置き換えてください。selector名はサービスや設定によって異なります。

ここで見ているのは公開DNSレコードです。この結果だけで、実際の1通のメールがSPF/DKIM/DMARCをpassしたとは判断できません。実メールでは Authentication-Results などのヘッダーと、MAIL FROM、DKIMの d=、表示Fromのalignmentを合わせて確認します。

複数の問い合わせをまとめたPowerShell版もGitHubに置いてあります。

2026年に古い記事を読むときの注意

DMARCの解説記事では長年RFC 7489が引用されてきました。しかし現在のRFC EditorではRFC 9989がProposed Standardとして公開され、RFC 7489とRFC 9091をobsoleteにしています。

したがって、「RFC 7489にこう書いてあるから現在もこれが正本」と扱わず、現行RFCを確認する必要があります。これは、古い技術記事をAIでリライトするときにも見落としやすいポイントです。

Microsoft 365では3つを別々に終わらせない

Microsoft 365の公式資料もSPF、DKIM、DMARCを連携する構成要素として説明しています。実運用では、自社の送信元、SaaSからの代理送信、転送、サブドメインなどが絡むため、サンプルDNSレコードをそのままコピーするのではなく、自分のメール経路を先に棚卸しします。 仕組みの位置関係に絞り、具体的な p=reject などの運用値を一律には推奨しません。

GitHubサンプル

公式情報・一次情報

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
タイトルとURLをコピーしました