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

- `-all`（Fail）と `~all`（SoftFail）が受信側に対してどう違うか
- Gmail / Outlook での実質的な扱いの差
- DMARC を併用すると `~all` でも実質 `-all` 相当になる仕組み
- 安全に `~all` → `-all` へ切り替える手順

## SPF 末尾修飾子の意味

SPF レコードの末尾には必ず `?all` `~all` `-all` `+all` のいずれかが付きます。これは「許可リストに無い IP から送られたメールをどう扱うか」を示すヒントです。

| 修飾子 | 意味 | 推奨度 |
|---|---|---|
| `+all` | 全許可 | ❌ 絶対 NG |
| `?all` | Neutral（判定保留） | ❌ 意味薄い |
| `~all` | SoftFail（疑わしいが受信側判断） | ⚠️ 過渡期 |
| `-all` | Fail（拒否を強く推奨） | ✅ 推奨 |

![SPF 末尾修飾子の強度](/blog/spf-fail-vs-softfail/qualifiers.svg)

## 受信側の挙動

**`-all`（Fail）**: 認証失敗を強く示すシグナル。SPF 単体評価でも spam フォルダ行きの判定に強く影響。

**`~all`（SoftFail）**: 「許可リスト外だが、拒否までは要請しない」。受信側は spam スコアに加点する程度の扱いが一般的で、配送自体は通る場合が多い。

ただし重要なのは **DMARC を併用している場合の挙動**:

![DMARC 併用での実質強度](/blog/spf-fail-vs-softfail/with-dmarc.svg)

DMARC は `~all` も `-all` も「SPF アラインメント fail」として同等に扱います。つまり **DMARC `p=reject` が効いている場合、`~all` でも実質 `-all` 相当**になります。逆に DMARC が `p=none` なら `~all` は実質ほぼ意味なし。

## どちらを使うべきか

- **DMARC `p=reject` が運用中**: `~all` でも `-all` でも実質同じ。ただし**将来の DMARC ポリシー後退や、SPF 単独評価を行う一部古いメールサーバへの配慮として `-all` 推奨**
- **DMARC `p=none` / 未設定**: `~all` は実質的にほぼ機能しない。`-all` に設定する必要がある
- **DMARC 段階強化中**: SPF も `~all` → `-all` に同時に進めるのが整合的

## `~all` → `-all` への安全な切替手順

1. **DMARC レポート（rua）を 2 週間観察**: 認証失敗している正規送信元（マーケツール、CRM、決済通知など）を洗い出す
2. **すべての正規送信元を SPF に include 追加**: 漏れがあれば追加（[SPF 設定ガイド](/blog/spf-setup-guide) 参照）
3. **DMARC を `p=quarantine` に強化**: ここで挙動を 1 週間確認
4. **SPF を `-all` に切替**: 同時に DMARC を `p=reject` に進める

逆順に進めない（先に `-all` だけ切替えると正規メールが弾かれます）。

## まずは現状を把握しましょう

自社の SPF レコード末尾が `~all` のままになっていないか、無料の[ドメイン診断](/diagnose)で確認できます。判断に迷う場合は[お問い合わせ](/contact)からご相談ください。

関連記事: [SPF 設定ガイド](/blog/spf-setup-guide) / [SPF include 10 個制限の対処](/blog/spf-flattening) / [DMARC ポリシーを quarantine に強化する手順](/blog/dmarc-policy-tightening)
