独自ドメインのメールが迷惑メールに入る。DNSを実際に測ると、原因はだいたいこの4つでした

独自ドメインのメールが迷惑メールに入る。DNSを実際に測ると、原因はだいたいこの4つでした

記事
IT・テクノロジー
独自ドメインでメールを出していると、あるとき言われます。

「メール届いてませんでしたか? ……あ、迷惑メールに入ってました」

対策を検索すると「SPFとDKIMとDMARCを設定しましょう」と出てきます。設定した。なのに変わらない。——ここで止まっている方が多いと思います。

設定したつもりで、効いていないことがあります。しかもそれは、DNSを見れば分かります。

実際にいくつかのドメインを測ってみたら、同じ型が繰り返し出てきました。4つ書きます。

────────────────────────

■ 1. SPFレコードが2本ある

これがいちばん怖いです。

SPFは1つのドメインに1本しか置けません。2本あると、受信側は評価を打ち切ります(permerror)。結果、SPFが無いのと同じ扱いになります。

仕様にこう書かれています。

  If the resultant record set includes more than one record, check_host() produces the "permerror" result.
  (RFC 7208 Section 4.5「Selecting Records」)

怖いのは、設定した本人ほど気づけないことです。「メール配信サービスを入れたのでSPFを追加した」「フォームのサービスを入れたのでもう1本足した」——足した本人からすると、2本とも正しく書けています。文法エラーも出ません。ただ、2本あるという一点で無効になります。

正しくは、1本にまとめます。include: を横に並べるのが正解で、行を増やすのは不正解です。

■ 2. SPFのDNS参照が10回を超えている

これは知られていない割に、よく起きます。

SPFの評価には、DNSを引ける回数の上限が10回と決まっています。include: は1つにつき1回、しかもその先のSPFに書かれた include: も数に入ります。

  SPF implementations MUST limit the total number of those terms to 10 during SPF evaluation, to avoid unreasonable load on the DNS. If this limit is exceeded, the implementation MUST return "permerror".
  (RFC 7208 Section 4.6.4「DNS Lookup Limits」)

つまり、送信サービスを足していくと、静かに増えていきます。そして10回を超えた瞬間、SPFが丸ごと無効になります。何も変えていないのに、ある日から迷惑メール判定が増える、という形で出ます。

自分で測ってみた範囲でも、あと1つ足したら超えるという状態のドメインがありました。設定した人は、たぶん気づいていません。

■ 3. MXが複数の事業者にまたがっている

「一部の相手からのメールだけ届かない」なら、これを疑ってください。

サーバーを移したのに古いMXレコードが残っている。あるいはドメイン取得時のメール転送サービスが有効なまま。この状態だと、優先度がいちばん小さいものへ配送されるので、受信箱が2つに割れます。

自分では気づけません。自分宛のテストメールは届くからです。届かないのは、たまたま別の経路に振られた相手のメールだけです。

■ 4. DKIMの公開鍵が空になっている

DKIMのレコードを引くと、p= の後ろが空のことがあります。これは鍵が撤回された状態です。鍵を作り直したときに古いセレクタが残っている、といった経緯で起きます。レコード自体は存在するので「DKIMは設定済み」に見えますが、署名の検証は必ず失敗します。

────────────────────────

■ 自分で確かめる方法

Macならターミナル、Windowsならコマンドプロンプトで、example.com をご自分のドメインに変えて実行してください。

Mac
  dig MX example.com +short
  dig TXT example.com +short
  dig TXT google._domainkey.example.com +short
  dig TXT _dmarc.example.com +short

Windows
  nslookup -type=MX example.com
  nslookup -type=TXT example.com
  nslookup -type=TXT google._domainkey.example.com
  nslookup -type=TXT _dmarc.example.com

2つ目の結果に v=spf1 で始まる行が2つあれば、1の状態です。

────────────────────────

■ ★順番を間違えると、自分のメールを自分で拒否させます

最後にこれだけは。SPF・DKIM・DMARCを同時に入れてはいけません。

Googleの公式ヘルプにこう書いてあります。

  SPF や DKIM を設定してから DMARC を設定するまでに、48 時間の間隔を空けてください。
  (Google Workspace 管理者ヘルプ「DMARC を設定する」)

DMARCは「SPFとDKIMが失敗したらどうするか」を指定するものなので、先にSPFとDKIMが通っている必要があります。順番を逆にすると、認証が通っていない自分のメールに対して、自分で「拒否してください」と宣言することになります。

そして最初のDMARCは必ず p=none です。これも公式が推奨しています。いきなり p=reject にすると、認証が漏れている経路(問い合わせフォームからの自動返信など)が全部止まります。

────────────────────────

■ 自分の道具も間違えました

これを自動で判定する道具を作ったのですが、実在のドメインで2回、間違った警告を出しました。

1つ目は 0 . というMXレコードを「壊れている」と報告したこと。これは Null MX といって、「このドメインは意図的にメールを受け取りません」という正しい宣言です(RFC 7505)。送信専用ドメインなら正常な状態で、直させてはいけないものでした。

2つ目は、*._domainkey にワイルドカードを置いているドメインで、16個のセレクタ全部に「DKIMあり」と報告したこと。存在しない名前を引いても応答が返るからです。

どちらも、存在しないはずの名前を1つ引いてみるという確認を足せば防げました。判定する前に「この判定方法が壊れる条件」を先に潰しておくべきでした。

診断は便利ですが、診断そのものが間違うことがあります。出てきた指摘は、直す前に一度「なぜそうなっているか」を考えてみてください。

────────────────────────

■ お手伝いできること

ご自分で測るのが面倒でしたら、ドメイン名を1つ教えていただければ、MX・SPF・DKIM・DMARCを実測して、見つかった問題を重い順に並べ、直す順番までお渡しします。

アカウントのIDやパスワードは要りません。公開されているDNSだけで完結します。

→ 独自ドメインのメールが届かない原因を調べます

ただし、公開DNSに出ないこと(実際の送信結果、受信側のログ、送信元IPの評判、本文による判定)は分かりません。「必ず迷惑メールに入らなくなる」ともお約束できません。認証の設定は必要条件であって、十分条件ではないからです。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す