SPFレコードのチェックと作成
任意のドメインのSPFレコードをチェックするか、新しいレコードを作成できます。このSPFチェッカーはレコードの各部分を説明し、DNSルックアップ数を上限の10回と比べて数えます。
SPFレコードをチェックする方法
- 上の入力欄にドメインを入力します。メールアドレスをそのまま入力しても構いません。ツールはドメイン部分だけを使います。
- 「SPFレコードをチェック」をクリックします。公開DNSから現在のレコードを読み取ります。受信サーバーが読むのと同じレコードです。
- まず概要を確認します。レコードが有効か、警告があるか、壊れているかがわかります。
- 問題がある場合は、問題の一覧を確認します。それぞれに変更すべき点が書かれています。
- その下で、レコードの各部分の意味と、それぞれが使うDNSルックアップの数を確認できます。includeを開くと、その先のサービスが許可している内容を確認できます。
アドレスバーのリンクを開くと、同じSPFチェックがもう一度実行されます。同僚やDNSの管理会社に送ることができます。注意点が1つあります。受信サーバーは、メールを送ったサーバーのIPアドレスに対してSPFを確認します。このツールには確認するメールがないため、レコード自体をチェックします。送信サーバーごとに内容が変わるSPFマクロを使った部分は評価できません。

SPFレコードとは
SPFレコードは、ドメインのDNSに登録するTXTレコードです。そのドメインのメールを送ってよいサーバーを一覧にしたものです。SPFはSender Policy Frameworkの略で、ルールはRFC 7208に定められています。Google Workspaceを使うドメインには、次のようなレコードがよく設定されています。
v=spf1 include:_spf.google.com ~all
v=spf1 は、これがSPFレコードであることを示します。include:_spf.google.com は、Google自身の一覧にあるすべてのサーバーを許可します。~all は、それ以外のサーバーからのメールを疑わしいものとして扱うよう受信サーバーに伝えます。
メールが届くと、受信サーバーはバウンスアドレス(Return-Path)からドメインを取り出します。そのドメインのSPFレコードを読み、送信サーバーのIPアドレスが一覧にあるかを確認します。SPFは、受信トレイに表示される差出人(From)アドレスは確認しません。そのため、SPFはDKIMやDMARCと組み合わせて使います。3つの関係はSPF・DKIM・DMARCの解説をご覧ください。
2024年2月から、Gmailはすべての送信者にSPFまたはDKIMを求めています。大量送信者には両方を求めています。Yahooも同じルールです。
SPFレコードの各部分の意味
SPFレコードは、スペースで区切った項目の並びです。受信サーバーは左から順に読み、送信サーバーに最初に一致した項目で止まります。
| 部分 | 働き | DNSルックアップ |
|---|---|---|
| v=spf1 | TXTレコードがSPFであることを示します。先頭に、この形のとおりに書く必要があります。 | DNSルックアップ:なし |
| ip4:192.0.2.10 | 1つのIPv4アドレス、または192.0.2.0/24のような範囲を許可します。 | DNSルックアップ:なし |
| ip6:2001:db8::/32 | 1つのIPv6アドレス、または範囲を許可します。 | DNSルックアップ:なし |
| a | そのドメイン自体のIPアドレス、またはコロンの後に書いたドメインのIPアドレスを許可します。 | DNSルックアップ:あり |
| mx | ドメインのMXレコードにあるサーバー、つまりそのドメインのメールを受信するサーバーを許可します。 | DNSルックアップ:あり |
| include:_spf.google.com | 別のドメインのSPFレコードが許可するすべてのサーバーを許可します。サービスを追加するときはこれを使います。 | DNSルックアップ:あり(参照先の分も加算) |
| exists:%{i}.example.com | DNSルックアップでアドレスが見つかったときに一致します。大規模な送信者がマクロと組み合わせて使います。 | DNSルックアップ:あり |
| ptr | 逆引きDNSで一致を判定します。遅く信頼性が低いため、RFC 7208は使わないよう求めています。 | DNSルックアップ:あり |
| ~all または -all | 一覧にないすべてのサーバーの扱いを決めます。末尾に書きます。 | DNSルックアップ:なし |
| redirect=example.net | このレコードの代わりに、別のドメインのSPFレコードを使います。レコードにallがある場合は無視されます。 | DNSルックアップ:あり |
どの部分にも、一致したときの結果を決める修飾子を先頭に付けられます。+ はpass(合格)で、既定値のため通常は書きません。- はfail(失敗)、~ はsoftfail(ソフトフェイル)、? はneutral(中立)です。そのため、同じallでも、レコードの末尾は -all、~all、?all のように変わります。
名前の大文字と小文字は区別されません。Include: も include: と同じように動きます。RFC 7208は、すべてのレコードをallまたはredirectで終えることを推奨しています。どちらもない場合、一覧にないサーバーの結果はneutralになります。
DNSルックアップの上限は10回
include、a、mx、ptr、exists、redirectは、それぞれ受信サーバーにDNSルックアップを1回行わせます。RFC 7208が認める合計は10回です。include先でのルックアップも数えるため、1つのincludeで数回分を使うことがあります。ip4、ip6、allはルックアップを使いません。10回を超えるレコードでは、受信サーバーは処理を止めてpermerrorを返し、SPFは失敗します。
この上限にはすぐに達します。よく使われるincludeのコストを公開DNSで測定したところ、Google Workspaceは1回、Microsoft 365は1回、Salesforceは2回、Mailgunは5回、Freshdeskは7回でした。Google Workspaceを使う会社がMailgunとFreshdeskを追加すると、それだけで13回必要です。.com、.net、.org、.seのSPFレコードを調べた2024年の研究では、6.5%が10回を超えるルックアップを必要としていました。そのうち83.7%は、わずか2つのホスティング事業者のレコードのincludeが原因でした。
コストは変わることもあります。Googleのincludeは2025年12月まで4回のルックアップを使っていました。この月にGoogleはネストしたincludeを1つの一覧に置き換えました。今でも4回と書いているSPFの解説や生成ツールがあります。上のチェッカーは、実行するたびに実際の回数を数えます。
上限を超えても、すべてのメールが失敗するとは限りません。Microsoftが指摘しているように、受信サーバーは最初に一致した項目で止まります。前の方に書かれたサーバーからのメールは合格し、後ろの方に書かれたサーバーからのメールは失敗することがあります。問題が不規則に見えるため、レコード全体の回数を数えてください。
上限はもう1つあります。何も見つからなかったルックアップを空のルックアップ(void lookup)と呼びます。たとえば、もう存在しないドメインへのincludeです。RFC 7208は、これが2回あった時点で受信サーバーは処理を止めるべきだとしています。
DNSルックアップを10回以内に減らす方法
- もう使っていないサービスのincludeを削除します。
- サービス側が求めなくなったincludeを削除します。Mailchimp、Postmark、Brevo、Klaviyoはメインドメインにincludeを必要としません。SendGridとAmazon SESはサブドメインに設定します。一覧はこの下にあります。
- 自社のサーバーは、aやmxではなくip4とip6で書きます。RFC 7208はこの書き方を推奨しており、IPアドレスはルックアップを使いません。
- 一部のメールは、news.example.comのようなサブドメインから送ります。サブドメインごとに独自のレコードがあり、それぞれ10回まで使えます。
SPFフラット化(flattening)を提供するサービスもあります。includeを、その先にあるIPアドレスに置き換える方法です。ルックアップは減りますが、事業者がアドレスを変えても、フラット化したレコードは追随しません。Microsoftは、安定していて公開されたIP範囲を持つサービスだけをフラット化し、Microsoft 365自体はフラット化しないよう勧めています。また、少なくとも四半期ごとに結果を確認するよう勧めています。
Google Workspace、Microsoft 365などのSPF include一覧
各サービスの設定ガイドに記載されたincludeの値と、それぞれが使うDNSルックアップの回数です。回数は2026年10月12日に公開DNSで測定しました。サービスを設定するときは、そのサービスのガイドから値をコピーしてください。地域やアカウントによって値が変わる場合があります。
| サービス | include | ルックアップ |
|---|---|---|
| Google Workspace · ルックアップ1回 | include:_spf.google.com | 1 |
| Microsoft 365 · ルックアップ1回 | include:spf.protection.outlook.com | 1 |
| Zoho Mail · ルックアップ2回 | include:zohomail.com | 2 |
| Proton Mail · ルックアップ2回 | include:_spf.protonmail.ch | 2 |
| Fastmail · ルックアップ1回 | include:spf.messagingengine.com | 1 |
| iCloud Mail · ルックアップ5回 | include:icloud.com | 5 |
| Namecheap Private Email · ルックアップ4回 | include:spf.privateemail.com | 4 |
| Hostinger · ルックアップ3回 | include:_spf.mail.hostinger.com | 3 |
| GoDaddy · ルックアップ3回 | include:secureserver.net | 3 |
| Mailgun · ルックアップ5回 | include:mailgun.org | 5 |
| Salesforce · ルックアップ2回 | include:_spf.salesforce.com | 2 |
| Zendesk · ルックアップ1回 | include:mail.zendesk.com | 1 |
| Freshdesk · ルックアップ7回 | include:email.freshdesk.com | 7 |
| Mailjet · ルックアップ1回 | include:spf.mailjet.com | 1 |
HubSpotはアカウントごとに専用のincludeを発行します。末尾はhubspotemail.netです。HubSpotのメール設定からコピーしてください。ルックアップは1回です。
通常はincludeが不要なサービス
SPFは差出人(From)アドレスではなく、バウンスアドレスに対して確認されます。多くの送信サービスは、自社のバウンスアドレスか、お客様のドメインのサブドメインを使うようになりました。それらのincludeをメインドメインに書いても、ルックアップを消費するだけです。
- Mailchimp. Mailchimpのドメイン設定で求められるのは、現在はDKIMとDMARCのレコードだけで、SPFは求められません。
- Postmark. Postmarkは、SPFはもう必要ないとしています。Postmark自身のバウンスアドレス、またはPostmarkを指すReturn-Pathレコードを使って送信します。
- Brevo. Brevoは、専用IPアドレスから送信する場合を除き、SPFは必要ないとしています。
- Klaviyo. Klaviyoは、通常SPFレコードを追加する必要はないとしています。
- SendGrid. SendGridのドメイン認証では、em1234.yourdomain.comのように自動で作成されるサブドメインにSPFが設定されます。
- Amazon SES. SESで必要なのは、bounce.yourdomain.comのようなカスタムMAIL FROMサブドメインを使う場合だけです。既定ではSES自身のバウンスアドレスを使います。
チェッカーは、レコードにこれらのincludeを見つけると指摘します。
SPFレコードを作成する方法
上の「作成」タブでSPFレコードを生成できます。メールを送っているサービスにチェックを入れると、レコードを作成し、ルックアップ数を数えます。ドメインにすでにレコードがある場合は、先にそれを読み込んでください。既存のレコードを置き換えずに、追加する形で作成できます。手順は次のとおりです。
- ドメインのアドレスでメールを送るサービスをすべて書き出します。メールボックスのサービスだけでなく、ニュースレター、CRM、ヘルプデスク、請求、Webサイトのフォームも考えてください。DMARCレポートを見ると、忘れていた送信元がわかります。
- 各サービスのincludeを設定ガイドで確認するか、ツールでチェックを入れます。自社のメールサーバーは、IPアドレスで書きます。
- 末尾を ~all にするか -all にするかを選びます。違いは次のセクションで説明します。
- ドメイン自体に1つのTXTレコードとして公開します。多くのDNS管理画面では、この名前を@と呼びます。v=spf1で始まるレコードがすでにある場合は、2つ目を追加せずにそのレコードを編集します。
- 数分待ってから、SPFチェッカーでもう一度ドメインをチェックします。
サブドメインは親ドメインのレコードを使わないため、メールを送る名前ごとにレコードが必要です。メールを一切送らないドメインやサブドメインにも、v=spf1 -all を設定してください。RFC 7208は、これを確立されたベストプラクティスとしています。その名前をかたって合格するメールを他人が送れなくなります。英国NCSCは、こうしたドメインにp=rejectのDMARCレコードとNull MXレコードも追加するよう勧めています。
255文字を超えるレコードは、同じTXTレコードの中で複数の文字列に分ける必要があります。受信サーバーは文字列をスペースなしでつなげるため、スペースは文字列の間ではなく、文字列の中に入れてください。長い値の扱いはDNS管理会社によって異なるため、確認してください。
~all と -all:どちらの末尾を使うべきか
大手の事業者の間でも意見は分かれており、それぞれに理由があります。
- Googleは ~all を推奨しています。
- 大手メールボックス事業者や送信者が加盟する業界団体M3AAWGは、レコードを ~all で終えるべきだとしています。また、DMARCの確認が終わるまでSPFのfailを理由に拒否しないよう、受信側に求めています。
- Microsoftは、DKIMとDMARCも設定していることを条件に、-all を推奨しています。
-all のリスクは、一部の受信サーバーがDMARCを確認する前に、配信の途中でメールを拒否することです。2026年のDMARC標準であるRFC 9989は、こうしたメールはDMARCレポートに表れないと指摘しています。そのため、問題を見つけにくくなります。
実際には、メールを送るドメインでは ~all のほうが安全です。すべての送信元をまだ洗い出している段階では特にそうです。DMARCがquarantineまたはrejectであれば、失敗したメールの扱いはいずれにしてもDMARCが決めます。メールを一切送らないドメインには -all を使います。すべてのサーバーを合格させる +all は絶対に使わないでください。レコードがないのと同じ扱いになる ?all も避けてください。
SPFチェック結果の意味
| 結果 | 意味 | 対応 |
|---|---|---|
| 有効なSPFレコード | レコードが1つで、読み取れ、ルックアップが10回以内で、末尾が ~all か -all です。 | 対応は不要です。メールを送る新しいサービスを追加したら、もう一度チェックしてください。 |
| 動作するが警告のあるSPFレコード | 受信サーバーは使えますが、ルックアップが9回か10回、末尾にallがない、ptrを使っているなど、弱める要素があります。 | レコードの下に表示された警告を修正します。サービスをもう1つ追加すると、エラーに変わることがよくあります。 |
| SPFレコードが壊れている | 受信サーバーがpermerrorを返すため、ドメインからのすべてのメールでSPFが失敗します。 | 表示されたエラーを修正します。多いのは、レコードが2つあることと、ルックアップが10回を超えることです。 |
| SPFレコードがドメインを保護していない | レコードの末尾が +all であるか、+all で終わるレコードをincludeしているため、インターネット上のすべてのサーバーが合格します。 | +all を ~all か -all に変更します。 |
| SPFレコードがない | ドメインにv=spf1で始まるTXTレコードがありません。 | 「作成」タブで作成します。メールを一切送らないドメインには v=spf1 -all を設定します。 |
| ドメインが存在しない | DNSにこのドメインの記録がまったくありません。 | つづりを確認し、ドメインが登録されているかを確認します。 |
受信サーバーは、SPFチェックの結果を独自の言葉で表します。spf=passやspf=softfailのようにメールヘッダーに表示されるほか、DMARCレポートにも表示されます。
| pass | 送信サーバーは許可されています。 |
| fail | サーバーは許可されていません(-all)。受信サーバーはメールを拒否することがあります。 |
| softfail | サーバーはおそらく許可されていません(~all)。RFC 7208は、これだけを理由に拒否すべきではないとしています。 |
| neutral | レコードはこのサーバーについて何も示していません(?all)。レコードがないのと同じ扱いです。 |
| none | ドメインにSPFレコードがありません。 |
| temperror | DNSルックアップが一時的に失敗しました。送信側は後で再試行することがあります。 |
| permerror | レコードが壊れていて読み取れません。DNSで修正するしかありません。 |
よくあるSPFレコードのエラーと修正方法
2023年に人気ドメイン1,200万件を調べた調査では、56.5%にSPFが設定されており、SPFレコードの2.9%にエラーがありました。最も多いエラーは、SPFレコードのない名前を指すincludeやredirectでした。2番目に多かったのは、ルックアップ数の超過です。
1つのドメインにSPFレコードが2つある
新しいサービスの設定ガイドに「このTXTレコードを追加してください」とあり、古いレコードの横に追加してしまうとよく起こります。レコードが2つあるとpermerrorになります。1つにまとめてください。v=spf1を1つだけ先頭に置き、すべてのincludeとIPアドレスを並べ、最後にallを1つだけ書きます。
存在しない先を指すinclude
includeがSPFレコードのないドメインを指していると、レコード全体がpermerrorで失敗します。入力ミスのこともあれば、サービスが終了したり、includeを変更したりしたこともあります。削除するか、サービスの現在の値に置き換えてください。
末尾が +all、?all、またはallがない
+all はインターネット上のすべてのサーバーを許可するため、レコードは何も保護しません。?all やallがない場合はneutralの結果になり、受信サーバーはレコードがないのと同じように扱います。レコードの末尾は ~all か -all にしてください。
レコードにptrがある
RFC 7208は、ptrを使うべきではないとしています。遅く、ルックアップを1回使い、DNSに問題があるときは他の仕組みより信頼性が下がります。対象のサーバーをip4とip6で書いて置き換えてください。
入力ミス
コロンの後のスペース、一部が欠けたIPv4アドレス、SPFにない単語は、どれもpermerrorの原因になります。目立たないミスもあります。等号を使った include=example.com は不明な設定として読み飛ばされるため、そのサービスは許可されません。チェッカーはこれらをすべて指摘します。
SPFの解説でよく見られる3つの誤り
- 「SPFレコードに大文字は使えない」。RFC 7208は、名前の大文字と小文字を区別しないとしています。
- 「SPFレコードは最大255文字」。255文字の上限は、文字列1つごとの上限です。長いレコードは複数の文字列に分けます。RFC 7208が求めているのは、DNSの応答全体を約450バイト未満の小さいサイズに保つことだけです。
- 「includeは10個まで使える」。上限が数えるのはDNSルックアップです。include先でのルックアップも数えます。
SPFはメール認証の一部です
SPFの合格には限界があります。同じ2023年の調査では、34.7%のドメインが100,000を超えるIPアドレスからのメールを許可していました。また、誰かがメールを転送すると、転送サーバーはレコードにないため、SPFは失敗します。
DKIMはメール自体に署名するため、通常は転送後も有効です。DMARCは、SPFまたはDKIMが差出人(From)アドレスと同じドメインで合格したかを確認し、どちらも合格しなかったときの扱いを受信サーバーに伝えます。多くの送信サービスは自社のバウンスドメインでSPFに合格しますが、そのドメインは差出人アドレスと一致しません。サービス側でReturn-Pathをカスタム設定すると解決します。残りの2つのレコードはDKIM生成ツールとDMARC生成ツールで設定し、MXレコード確認ツールでドメインのメールの受信先を確認してください。
また、認証は存在しないアドレスには役立ちません。そうしたアドレスへのメールはバウンスし、バウンス率が高いと到達率が下がります。1件ずつならメールアドレスチェッカー、リスト全体ならメールアドレスの一括検証で確認できます。チームと共有できる短い定義は、用語集のSPFレコードをご覧ください。
よくある質問
ドメインのメールを送ってよいサーバーを一覧にした、ドメインのDNS上のTXTレコードです。受信サーバーはこれを読み、メールが本当にそのドメインのサーバーから送られたかを判断します。SPFはSender Policy Frameworkの略で、RFC 7208で定義されています。
このページ上部のSPFチェッカーにドメインを入力してください。ターミナルからは、Windowsなら nslookup -type=txt example.com、macOSやLinuxなら dig txt example.com で確認できます。v=spf1で始まるTXTレコードを探してください。
置けません。RFC 7208が認めるSPFレコードは、ドメイン名1つにつき1つです。2つあると、受信サーバーは永続的なエラーを返し、すべてのメールでSPFが失敗します。両方を1つのレコードにまとめてください。サイト認証用のコードなど、ほかのTXTレコードはそのままで構いません。
受信サーバーがSPFレコードを読み取れず、チェックが失敗したという意味です。主な原因は、SPFレコードが2つある、DNSルックアップが10回を超えている、SPFレコードのないドメインをincludeしている、のいずれかです。入力ミスでも起こります。上のチェッカーが原因を示します。
~all では、一覧にないサーバーからのメールはsoftfailになり、受信サーバーは通常は受け入れますが、より疑わしいものとして扱います。-all ではfailになり、拒否する受信サーバーもあります。Googleは ~all を推奨しています。Microsoftは、DKIMとDMARCを設定した後は -all を推奨しています。
メールを送るなら必要です。サブドメインは親ドメインのSPFレコードを使いません。news.example.comからメールを送るなら、専用のレコードが必要です。メールを一切送らないなら、v=spf1 -all を設定してください。
最大で古いレコードのTTLの長さです。古い応答をキャッシュしたリゾルバーは、TTLが切れるまでそれを使い続けます。TTLが3600なら、最大1時間です。Googleは最大48時間かかることがあるとしていますが、ほとんどの場合はずっと早く反映されます。
両方あるほうが安全です。GmailとYahooは、少量の送信者にはSPFかDKIMのどちらかを求め、大量送信者には両方を求めています。DMARCはどちらかが合格し、差出人(From)のドメインと一致すれば合格するため、両方あれば予備になります。
SPFだけでは防げません。SPFが確認するのはバウンスアドレス(Return-Path)で、受信者に見える差出人(From)アドレスではありません。スパム送信者は自分のドメインでSPFに合格しながら、差出人にお客様の名前を表示できます。DMARCは2つのドメインの一致を求めることで、この抜け穴をふさぎます。
