本文へスキップ
メール

送信は成功しているのに、届いていない

問い合わせフォームが「送信しました」と表示し、サーバーのログにも記録が残っている。それでも、お客様の受信箱には届いていない——ということが実際に起こります。しかもこの失敗は、送っている側からは一切見えません。自分のサイトで実際に見つけたので、確かめ方と直し方をまとめます。

先に結論

  • 原因は DKIM と DMARC の未設定。SPF はレンタルサーバーが最初から入れていることが多く、残り2つが抜けたまま何年も動きます。
  • 確かめるのは 1分。ブラウザでもターミナルでもできます(4章)。
  • 直すのは 管理画面で DKIM を ON にして、DNS に DMARC を1行足すだけ5章)。

「送信完了」と出たら、届いたということ?

結論から言うと、違います。「送信完了」が意味しているのは、こちらのサーバーがメールを送り出したところまでです。その先で受信側がどう扱ったかは、まったく別の話です。

実際に起きたこと

自分のサイトをリニューアルした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通を、「迷惑メールではない」に戻す
  2. そのうえで、新しく1通送る(転送や移動では判定になりません)
  3. 受信箱に入ったかを見る

この順番を守らないと、「設定が効いていない」のか「学習で弾かれている」のかが分からなくなります。

最後の確認は、DNS ではありません

DNS を整えても、それは「送れる形になった」だけです。

フォームの自動返信は、多くの場合 PHP がサーバーの中から送ります。メールソフトから送るのとは経路が違うため、同じ差出人でも署名のされ方が変わることがあります。

ですから最後は、本番のフォームから実際に1通送るしかありません。そのとき、控えの宛先には Gmail を指定してください。お客様の多くは Gmail です。他社のメールで通っても、Gmail で弾かれては意味がありません。

明日やること、3つ

  1. いまの状態を見る。Check MX にドメインを入れる。DMARC が無ければ未設定です(1分)
  2. DKIM を ON にして、DMARC を1行足す。サーバーの管理画面とDNSを1回ずつ(10分)
  3. 🔴 本番のフォームから、Gmail 宛に1通送る。迷惑メールに入っていた過去の1通を「迷惑メールではない」に戻してから送ること(5分)

3つ目まで済ませて、はじめて「直った」と言えます。DNSを整えただけでは、届くかどうかは分かりません。

あなたのサイトでは、どうなっていますか

問い合わせフォームがあるサイトなら、いますぐ確かめられます。

dig +short TXT _dmarc.あなたのドメイン

何も返ってこなければ、DMARC は未設定です。そのサイトの自動返信は、すでに何通か届いていないかもしれません。

私はこれを自分のサイトで見つけたあと、納品前のチェック項目に加えました。DNS を見るだけなので、URL さえあれば他の案件でも同じように確かめられます。ただし前に書いたとおり、機械に見えるのは「形」までです。実際に1通送って受信箱に届くかどうかは、いまも手で確かめています。制作会社の方へのページに、どんな検査をしているかを一覧で書いています。

コラム一覧へ