送信は成功しているのに、届いていない
問い合わせフォームが「送信しました」と表示し、サーバーのログにも記録が残っている。それでも、お客様の受信箱には届いていない——ということが実際に起こります。しかもこの失敗は、送っている側からは一切見えません。自分のサイトで実際に見つけたので、確かめ方と直し方をまとめます。
先に結論
「送信完了」と出たら、届いたということ?
結論から言うと、違います。「送信完了」が意味しているのは、こちらのサーバーがメールを送り出したところまでです。その先で受信側がどう扱ったかは、まったく別の話です。
実際に起きたこと
自分のサイトをリニューアルした2日後、通知用のメールアドレスにテストで1通送ってみたところ、迷惑メールフォルダに入りました。
そこで DNS を調べたところ、メールが本物だと示す設定が欠けていました。
- SPF … あり
- DKIM … 無し
- DMARC … 無し
問題はテストメールではありません。同じアドレスから、問い合わせの自動返信も送っていたことです。
なぜ、送る側から見えないのでしょうか
この失敗が厄介なのは、送信側に手がかりが1つも残らない点にあります。
お客様がフォームから送信
│
├─→ こちらに通知メールが届く ✅ 気づける
│
└─→ お客様に控えのメールを送る
│
└─→ 迷惑メールに入る ❌ ここが見えない
│
└─→ お客様「返事が来ない」
送信の処理そのものは成功しています。ですから、失敗を記録する仕組みには何も残りません。ログには「送った」としか書かれていないのです。
そしてお客様のほうは、「返事が来ない会社だ」と思って離れていきます。問い合わせが来なかったのか、届いていたのに気づけなかったのか、こちらには区別がつきません。
メールが本物だと示す仕組みは、次の3つです
それぞれ役割が違います。3つで1組と考えてください。
| 仕組み | 何を示すか | たとえると |
|---|---|---|
| SPF | このサーバーから送ってよい、とドメインの持ち主が認めている | 差出人の住所 |
| DKIM | 途中で書き換えられていない(電子署名) | 封蝋(ふうろう) |
| DMARC | 上の2つが失敗したとき、受信側にどう扱ってほしいか | 取扱いの指示書 |
なぜ、いま急に届かなくなるのか
「前は届いていたのに」と感じる方が多いはずです。理由があります。
2024年2月から、Gmail に送るすべての送信者に、SPF か DKIM のどちらかが必須になりました。さらに 1日5,000通以上を送る「一括送信者」には、DMARC も求められます(2024年6月から)。
⚠️ 誤解しないでいただきたいのですが、小さなサイトの自動返信は「一括送信者」ではありません。DMARC が義務づけられているわけではないのです。
ただ、受信側全体の判定が厳しくなったのは確かです。「昔は通っていた設定」が、いまは通りにくくなっています。
SPF だけは、たいてい最初から入っています
レンタルサーバーを契約すると、SPF は最初から設定されていることがほとんどです。そのぶん「設定した覚えがないのに動いている」状態になりやすく、DKIM と DMARC が抜けたまま何年も運用されます。
受信側の判定が厳しくなっている以上、いまは SPF だけでは通りにくくなっています。
自分のサイトはどうか、1分で確かめられます
ブラウザだけで確かめる
ターミナルを使わない方は、こちらが早いです。
Google が公開している Check MX にドメインを入れると、SPF・DKIM・DMARC の状態がまとめて出ます。ログインも登録も要りません。
結果のなかに DMARC の項目があり、そこが「見つからない」となっていれば未設定です。
ターミナルで確かめる
次の2行を実行するだけです。example.com を対象のドメインに置き換えてください。
dig +short TXT example.com
dig +short TXT _dmarc.example.com
1行目に v=spf1 で始まる行が、2行目に v=DMARC1 で始まる行が返ってくれば設定されています。2行目が何も返さなければ、DMARC は未設定です。
DKIM だけは「無いこと」を確かめられません
DKIM は「セレクタ」という名前が分からないと引けない仕組みです。よく使われる名前で当たりを付けることはできますが、見つからなくても「無い」とは限りません。
確実なのは、実際に1通送って、受信したメールのヘッダを見ることです。Authentication-Results: の行に dkim=pass と出ていれば効いています。
直し方は、2つの操作だけです
ここからが本題です。うちの場合(エックスサーバー)は、管理画面とDNSを1回ずつ触っただけでした。
① DKIM を ON にする
サーバーパネルの「DKIM設定」で、対象ドメインの設定を OFF から ON に切り替えます。鍵の作成も、DNSへの登録も自動で行われます(そのサーバーのDNSを使っている場合)。
他社のDNSを使っている場合は、表示されたレコードを自分で登録する必要があります。
② DMARC を1行足す
DNSレコードに、次の1件を追加します。
ホスト名 _dmarc
種別 TXT
内容 v=DMARC1; p=none; rua=mailto:あなたのメールアドレス
🔴 p=none から始めてください。これは「判定はするが、何もしない(記録だけ送る)」という意味です。いきなり p=reject にすると、設定に穴があったときに正規のメールまで捨てられます。
⚠️ DNSは「追加」だけを使ってください。既存の MX レコードを消すと、メールの受信そのものが止まります。
しばらくすると rua に指定したアドレスへ、英語のレポート(XML添付)が届き始めます。これは正常です。捨てないでください。1〜2週間ようすを見て問題がなければ、p=quarantine に上げられます。
直したあと、確認の順番に注意が必要です
設定を直しても、すぐに判定が変わらないことがあります。一度「迷惑メール」と判断された送信元を、受信側がそう覚えているためです。
ですから、次の順番で確かめてください。
- 迷惑メールフォルダにある過去の1通を、「迷惑メールではない」に戻す
- そのうえで、新しく1通送る(転送や移動では判定になりません)
- 受信箱に入ったかを見る
この順番を守らないと、「設定が効いていない」のか「学習で弾かれている」のかが分からなくなります。
最後の確認は、DNS ではありません
DNS を整えても、それは「送れる形になった」だけです。
フォームの自動返信は、多くの場合 PHP がサーバーの中から送ります。メールソフトから送るのとは経路が違うため、同じ差出人でも署名のされ方が変わることがあります。
ですから最後は、本番のフォームから実際に1通送るしかありません。そのとき、控えの宛先には Gmail を指定してください。お客様の多くは Gmail です。他社のメールで通っても、Gmail で弾かれては意味がありません。
明日やること、3つ
- いまの状態を見る。Check MX にドメインを入れる。DMARC が無ければ未設定です(1分)
- DKIM を ON にして、DMARC を1行足す。サーバーの管理画面とDNSを1回ずつ(10分)
- 🔴 本番のフォームから、Gmail 宛に1通送る。迷惑メールに入っていた過去の1通を「迷惑メールではない」に戻してから送ること(5分)
3つ目まで済ませて、はじめて「直った」と言えます。DNSを整えただけでは、届くかどうかは分かりません。
あなたのサイトでは、どうなっていますか
問い合わせフォームがあるサイトなら、いますぐ確かめられます。
dig +short TXT _dmarc.あなたのドメイン
何も返ってこなければ、DMARC は未設定です。そのサイトの自動返信は、すでに何通か届いていないかもしれません。
私はこれを自分のサイトで見つけたあと、納品前のチェック項目に加えました。DNS を見るだけなので、URL さえあれば他の案件でも同じように確かめられます。ただし前に書いたとおり、機械に見えるのは「形」までです。実際に1通送って受信箱に届くかどうかは、いまも手で確かめています。制作会社の方へのページに、どんな検査をしているかを一覧で書いています。