§2 · SPF
SPF — Sender Policy Framework。
SPF(RFC 7208)は、自社ドメインを名乗ってメールを送信する権限を持つ IP アドレスの公開リストです。送信ドメインの単一の TXT レコードとして公開します。メールボックスプロバイダーは @yourcompany.com を名乗るメッセージを受信すると、yourcompany.com の SPF レコードを参照し「このメッセージはリストされた IP のいずれかから来たか?」と確認します。Yes なら SPF 合格、No なら不合格です。
構文
v=spf1 include:amazonses.com ~all
読み方は「SPF バージョン 1、Amazon SES が認可するものをすべて認可、それ以外はソフトフェイル」です。末尾の ~all は catch-all 句です。~all = ソフトフェイル(疑わしいとマークするが受け入れ)、-all = ハードフェイル(拒否)、?all = 中立(判断なし)。DMARC が健全になるまでは ~all を使用し、その後 -all へ引き締めます。
複数の送信元(例:アウトバウンド用の Google Workspace + マーケティング用の SES + トランザクション用の Mailgun)を使用する場合は、複数の include: メカニズムで連結します。
v=spf1 include:_spf.google.com include:amazonses.com include:mailgun.org ~all
DNS ルックアップ 10 回制限。RFC 7208 §4.6.4 では SPF 解決に必要な DNS ルックアップは合計 10 回までと定められています。各 include: は 1 回としてカウントされます。よくある失敗:5 ベンダー以上を連結して制限を超え、SPF が permerror に解決されて不合格扱いになるケース。制限に近づいている場合は dig TXT yourcompany.com と SPF フラットナーで監査してください。
AcelleMail における SPF
AcelleMail の SendingDomain モデルは app/Model/SendingDomain.php:154 で getSpf() を公開しており、グローバル設定の spf_record を読み込んで TXT レコード値を描画します。363 行目の verifySpf(string $ipOrHostname) メソッドは Mika56\SPFCheck ライブラリのラッパーで、実行時に DNS をライブで照会し RESULT_PASS を検証します。管理 UI の検証画面では、レコードが存在し送信 IP を認可していれば緑、それ以外は赤で表示されます。
実務的なヒント:SPF はエンベロープ送信者(SMTP レベルの MAIL FROM)のみを認証し、表示される From ヘッダーは認証しません。この差を埋めるのが DMARC のアライメントです — §4 を参照。