前回の基礎編、SPFやDKIMを設定しただけではまだ完ぺきではありません。
本当に安心な送信環境をつくるには、**DMARC(ディーマーク)**という追加設定が重要です。
DMARC(Domain-based Message Authentication, Reporting & Conformance)は、SPF・DKIMの結果をもとに判断し、受信側にどう処理してほしいかを伝えるルールを、ドメインごとに設定できる技術です。
「このドメインからのメールがSPFやDKIMに失敗していたらどう扱うか」をポリシーとして明確に伝えます。
さらに、第三者からの不正送信(なりすまし)を検知するレポート機能もあります。
DNSのTXTレコードに、以下のような形式で記述します:
_dmarc.coneco-waltz.jp. IN TXT “v=DMARC1; p=quarantine; rua=mailto:dmarc@coneco-waltz.jp”
主な構文要素:
・v=DMARC1: バージョン
・p=none | quarantine | reject: ポリシー(詳細後述)
・rua=mailto:~: レポートの送付先アドレス
p=の値により、受信側メールサーバーに以下の処理を指示できます:
・none:ポリシーを適用せず、監視のみ(初期設定に最適)
・quarantine:SPFやDKIMが失敗した場合は迷惑メール扱いに
・reject:SPF・DKIMとも失敗した場合はメールを拒否
最初は none で様子を見て、送信状況が安定してから quarantine → reject へと強化していくのが推奨されます。
DMARCを設定し rua= を指定すると、GmailやMicrosoftなどの受信側からXML形式のレポートが届きます。
レポートには以下のような情報が含まれます:
・source_ip: メール送信元IPアドレス
・count: そのIPから届いた件数
・header_from: 送信者のドメイン
・dkim, spf: 認証の成否
・disposition: DMARCポリシーによる処理(none / quarantine / reject)
例:
<row>
<source_ip>85.131.197.197</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
この例では、XserverのIP(85.131.197.197)から送られたメールで、DKIMはpassしたがSPFはfailしていることがわかります。
ただし disposition が「none」なので、強制的なブロックはされていません。
Xserverでは、DNS設定でTXTレコードを追加すればDMARCを有効にできます。
例:
ホスト名:_dmarc
種別:TXT
内容:”v=DMARC1; p=quarantine; rua=mailto:dmarc@coneco-waltz.jp”
また、Xserverの迷惑メール設定にある「迷惑メールとして配送」オプションは、p=quarantine に近い挙動をしますが、DMARCとは別のサーバー側の独自機能です。
そのため、DNS側のDMARCレコード設定とは切り離して考えましょう。
DMARCレポートでSPFがfailしていた場合、以下の原因が考えられます:
・PHPのmail()関数が Return-Path を適切に指定していない
・Fromアドレスと実際の送信元IPが不一致
・SPFレコードに送信元IPやincludeが含まれていない
このようなトラブルを避けるには、mail()ではなくPHPMailerなどでヘッダーを明示的に制御する方が確実です。
【まとめ】
・DMARCはSPFとDKIMの整合性をチェックし、処理方針を定める仕組み
・none → quarantine → reject の順で強化していく
・XMLレポートを使えば「なりすまし」「SPF不一致」などが見える化される
・Xserverや共用サーバーでも、DNS設定だけで導入可能
DMARCを設定することで、自ドメインを使ったなりすまし被害やスパム配信から守ることができ、メールの到達率も向上します。
実際に届いたDMARCレポートを読み解くことは、メール運用の品質管理にもつながります。