この記事では「WebサイトにあるPHP製メールフォームから送信したメールが、迷惑メールにならずに届くようにしたい!」という視点で、SPF / DKIM / DMARC についてゆるめに解説します。
SPF / DKIM / DMARC とはざっくりどんなもの?
メールを受け取るサーバーが、受け取ったメールについて、以下の検証をするための仕組みのことです。
- 「送信しているサーバーはホンモノ?(なりすましではない)」
- 「送信されたメールは、書きかえられていない?(改竄されていない)」
検証ができないメールや検証に合格しないメールは、迷惑メールになる確率が高くなります。
そのため「迷惑メールにならずに届くようにしたい!」と思ったら、まずは SPF / DKIM / DMARCの設定をきちんとすることになります。
登場人物
Webサイト「example.com」にPHP製メールフォームが設置してあり、そこからメールを送信するときに登場する、登場人物を紹介します。

example.comのPHP製メールフォームが設置してあるサーバー

example.comのDNS設定がされているサーバー

送信されたメールを受け取る側のメールサーバー
前提知識
メールには、普段目にしているメールのタイトルや本文など以外にも「メールヘッダー」という情報がくっついています。
SPF / DKIM / DMARC はその「メールヘッダー」に書いてあるいくつかの情報を使って、メールを検証します。
※メールヘッダーには、検証結果も書かれています。
SPF
SPFは、「送信しているサーバーはホンモノ?(なりすましではない)」の確認をする仕組みです。
メールヘッダーの Return-Path のドメインのネームサーバーに、メールを送信したサーバーのIPアドレスが書いてあるかを確認します。
- メール受信
- メールヘッダーのReturn-Pathのドメインを確認
- 送信者のIPアドレスがReturn-Pathのドメインのネームサーバーに書いてあるか確認
→ 書いてあれば検証合格(PASS)

※補足:Return-Pathのメールアドレスは必ずしもFromのメールアドレスと同じとは限りません。FromのメールアドレスとReturn-Pathのメールアドレスが異なるときは、Return-Pathの方のドメインのネームサーバーを確認しに行きます。(参考:【備忘録】さくらのレンタルサーバーに置いたWordPressでSPFがnoneになるのはReturn-Pathの設定のせい?)
設定のやりかた(ざっくり)
Return-PathのメールアドレスのドメインのネームサーバーのTXTレコードに v=spf1
ではじまるSPFレコードを記載します。
たとえば、XServerで設定すると以下のようなものになります。
v=spf1 +a:sv****.xserver.jp +a:[ドメイン名] +mx include:spf.sender.xserver.jp ~all
設定の確認のやりかた
DKIM
DKIMは、「送信されたメールは、書きかえられていない?(改竄されていない)」の確認をする仕組みです。
メール送信側のサーバーがメールに鍵付きの署名を付けて送り、メールサーバー側は署名時のメール内容と受け取ったメール内容に差がないか(=改竄されていないか)を確認します。
- メールを受信
- メールヘッダーのDKIM署名を確認
- DKIM署名に書かれた場所にある鍵を使って、署名を解読する
- 署名時のメールの内容と、現在のメールの内容に差がないか確認
→ 署名が解読できて、署名とメールの内容に差が無ければ合格(PASS)

設定のやりかた(割愛)
DKIMの署名は「公開鍵」と「秘密鍵」のペアを作って設定する必要があるのですが、各ウェブサーバーの管理画面からぽちっとボタンを押す以外の方法を説明できないので割愛します。
設定の確認のやりかた
DMARC
DMARCは、見た目の送信者(From)とSPFやDKIMの検証に使ったドメインが一致するかを、確認する仕組みです。
検証だけではなく、DMARCが不合格(FAIL)になったときメールを捨てるかそのまま受信するか、どちらにするかの指定(ポリシー)を指定することができます。
- SPFとDKIMの検証結果の確認
- SPFかDKIMのPASSしてる方のドメインとFromのドメインが一致しているかどうかの確認
- 指定(ポリシー)にそってメールを処理

DMARCがPASSするかどうかの例
SPF | DKIM | Fromと整合 | DMARC結果 |
---|---|---|---|
PASS | FAIL | 不整合(Return-PathがFromと別ドメイン) | FAIL |
FAIL | PASS | 整合(DKIM署名がFromと同ドメイン) | PASS |
PASS | FAIL | 整合(Return-PathがFromと同ドメイン) | PASS |
※SPFとDKIM両方がPASSしている場合、どちらかのドメインとFromが整合していればOK
※「同ドメイン」の部分は、サブドメインでも合格する
設定のやりかた(ざっくり)
_dmarc.example.com
のTXTレコードに、v=DMARC1
ではじまるDMARCレコードを設定します。
たとえば、以下のような感じです。
v=DMARC1; p=none;
メモ:Google WorkSpaceのヘルプ:DMARC を設定する によると、SPF や DKIM を設定してから DMARC を設定するまでに、48 時間の間隔をあける必要があるようです。
設定の確認のやりかた
※test.example.comから送信するときは、example.comの側のDMARCレコードで検証させる場合が多いようです。
コメント