結論から書くと、問い合わせフォームのメールが届かないときは、どこで止まっているかを先に確かめ、次にフォームの送り方と差出人(From)の設定、最後に自社ドメインの SPF・DKIM・DMARC を確かめる 順に見ます。Google の「お問い合わせフォームのメールが届かない場合のトラブルシューティング」も、通常、問題の原因はフォームではなく、フォームからのメールの送信方法にあるとしています。
この記事では、メールソフトの設定、メールサーバーの移転、メールマガジンのような一括送信は扱いません。ドメインの期限が切れてメール全体が止まっている場合は「SSL 証明書とドメインの期限切れを防ぐ管理——担当者が変わっても止まらない仕組み」で説明しています。
まず、どこで止まっているかを切り分ける
「届かない」には次の3つがあり、対応が違います。
| 状態 | 確かめる場所 |
|---|---|
| そもそも送られていない | フォームの送信履歴、サーバーのメール送信ログ(管理画面にあれば) |
| 迷惑メールフォルダに入っている | 受信側の迷惑メールフォルダ |
| 受信側で拒否されている | 返ってきたエラーメール、送信ログのエラー |
フォームの「送信しました」の画面は、届いたことの確認になりません。PHP のマニュアルは、mail() 関数の戻り値は配送が受け入れられたかどうかが基準で、実際にあて先に届いたかどうかではないと注意しています。WordPress の wp_mail() の説明も同じ趣旨です。会社のアドレスと、Gmail など社外のアドレスの両方にテスト送信して、どちらに届かないかを見ます。
迷惑メールフォルダに入っていた場合、Gmail では「迷惑メールではない」を選ぶと、以降その送信者からのメールは迷惑メールに振り分けられなくなります。ただし受信する人ごとの設定なので、原因はこの後の手順で直します。
拒否された場合は、エラーメールに理由が書かれています。Gmail のメール送信者のガイドラインは、認証されていないメールは迷惑メールに分類されたり、5.7.26 エラーで拒否されたりすることがあるとしています。エラーメールは配送の記録上の差出人(エンベロープ送信者。Return-Path とも呼ばれます)に返るため、そのアドレスが誰も読んでいない初期設定のままになっていないかも確かめます。
フォームがどうやってメールを送っているかを確かめる
フォームのメールの送り方は、主に次の3つです。
| 送り方 | 届かないときに見るところ |
|---|---|
| サーバーから直接送る(PHP の mail() など) | Web サーバーが SPF に含まれているか、エンベロープ送信者のアドレス |
| SMTP 認証で送る(メールアカウントでメールサーバーにログインして送る) | ユーザー名・パスワード・サーバー名などの接続の設定 |
| 外部のフォームのサービスで送る | サービスが案内する SPF・DKIM の設定をしているか |
Google の SPF の設定のページは、メールの送信元の例として Web サーバーや「お問い合わせ」フォームを挙げ、SPF にはドメインに代わってメールを送るすべてのサーバーを含める必要があるとしています。フォームも、自社ドメインのメールの送信元の一つです。
サーバーから直接送る方式では、From を自社ドメインにしていても、エンベロープ送信者がサーバーの初期設定のアドレスのままのことがあります。後で説明する DMARC で SPF の結果が使われるのは、エンベロープ送信者と From のドメインが一致している(またはそのサブドメインの)ときです。PHP の mail() では、sendmail を使う場合、エンベロープ送信者を -f オプションで指定できると前述のマニュアルにあります。
SMTP 認証で送る方式では、メールアカウントのパスワードを変えたのにフォームの設定を変えていないと送れなくなります。前述の Google のトラブルシューティングも、SMTP で送っている場合はフォームの側でログイン情報が正しいかを確かめるよう書いています。
From に問い合わせした人のアドレスを入れていないか
返信しやすいように、問い合わせした人のアドレスを通知メールの From に入れる設定にしていることがあります。問い合わせした人が Gmail などを使っていると、自社のサーバーから他社のドメインを差出人にして送ることになり、届かない原因になります。
- Gmail のガイドラインは、DMARC に合格するには SPF か DKIM で認証され、その認証のドメインが From のドメインと一致している必要があるとしています。他社のドメインを From にすると、この一致が成り立ちません。
- 同じガイドラインは、Gmail の From: ヘッダーのなりすましをしないよう求め、Gmail で DMARC の quarantine(検疫)の適用ポリシーの使用が始まるため配信に影響する可能性があるとしています。From: と To: には実際の送信者と受信者だけを指定するようにも書いています。
直し方は、From を自社ドメインの送信用のアドレスにし、問い合わせした人のアドレスは Reply-To(返信先)に入れることです。メールの形式を定めた RFC 5322 では、Reply-To は返信を送ってほしいアドレスを示す欄で、「返信」を押すと問い合わせした人あてになります。
From: お問い合わせフォーム <form@example.com>
Reply-To: (問い合わせした人のアドレス)
form@example.com は例で、自社ドメインのアドレスにします。入力されたアドレスをヘッダーに入れるときは、改行などで別のヘッダーを差し込まれない処理が要ります。PHP のマニュアルも、外部からのデータでヘッダーを組み立てる際は、想定外のヘッダーの注入を防ぐ処理が必要だとしています。
自社ドメインの SPF・DKIM・DMARC を確かめる
次に、自社ドメインの DNS(ドメインとサーバーを結びつける設定)にある TXT レコードを確かめます。Gmail のガイドラインは、2024年2月1日以降、個人用の Gmail アカウント(@gmail.com など)に送るすべての送信者に SPF か DKIM を、1日に5,000件を超えて送る送信者には3つすべてを求めています。
| 仕組み | 役割 | レコードの名前と値の一般形 |
|---|---|---|
| SPF | メールを送ってよいサーバーを示す | ドメイン自体に v=spf1 include:(送信サービスが案内するドメイン) ~all |
| DKIM | メールに電子署名を付け、受信側が公開鍵で確かめる | (セレクタ)._domainkey.(ドメイン) に v=DKIM1; k=rsa; p=(公開鍵) |
| DMARC | SPF・DKIM に合格しなかったメールの扱いを示す | _dmarc.(ドメイン) に v=DMARC1; p=none; rua=mailto:(レポートの受け取り先) |
確かめる点は次のとおりです。
- SPF のレコードが1つだけか。 Google の SPF のトラブルシューティングは、各ドメインに設定できる SPF レコードは1つだけで、複数あると迷惑メールに振り分けられる可能性があるとしています。送信サービスを足すときに別の行で追加すると起きるので、1つにまとめます。
- SPF の参照が多すぎないか。 同じページは、DNS の参照(include など)は最大10回までで、超えると検証が失敗する原因になるとしています。使わなくなったサービスの include は消します。
- DKIM の署名が付いているか。 DKIM の設定のページのとおり、受信したメールのヘッダー(Gmail では「メッセージのソースを表示」)で Authentication-Results を探し、DKIM の結果が pass かを見ます。
- DMARC は p=none から始めているか。 DMARC の設定のページは、始めは p を none にし、認証の状況が分かってから quarantine や reject に変えるよう勧め、SPF や DKIM の設定から DMARC の設定まで48時間空けるよう書いています。
TXT レコードは、DNS を管理している管理画面(ドメインの登録事業者かサーバー)で見られます。コマンドなら dig +short TXT _dmarc.example.com のように調べます。SPF の設定のページは、SPF 認証が機能し始めるまで最長で48時間ほどかかることがあるとしているので、直したら時間をおいてテスト送信で確かめます。書き換える前には、今の値を控えておきます。
自動返信だけが届かない場合
社内への通知は届くのに、問い合わせした人への自動返信だけが届かないこともあります。自動返信は社外のさまざまなアドレスに送られるため、受信側の判定の影響を受けやすくなります。
- 自動返信も、自社ドメインの From で、SPF・DKIM に合格して送っているか。 通知メールと送り方の設定が違っていないかを見ます。
- 入力されたアドレスに誤りがないか。 存在しないアドレスなら、エラーメールがエンベロープ送信者に返っています。
- 問い合わせした人の受信の設定。 受け取るドメインを指定する設定にしていると届きません。送る側では直せないので、送信完了の画面に「自動返信が届かないときは迷惑メールフォルダを確かめるか、電話などでご連絡ください」と書いておきます。
- 自動返信の中身。 Gmail のガイドラインは、迷惑メールとして報告される頻度が高いと、以降のメールも迷惑メールに分類されやすくなるとしています。フォームに他人のアドレスを入れて送信されると、その人に届いた自動返信が報告されることがあります。自動返信は受け付けたことの連絡にとどめ、宣伝などを混ぜないようにします。
h-system でできること
h-system のサイト運用代行ライトプランでは、他社が制作したホームページも含めて、稼働の監視、サーバー・基盤まわりの更新対応、不具合時の一次対応といったサーバー管理を、代表が直接お引き受けしています。問い合わせフォームのメールが届かないといった不具合のときも、まず窓口として動きます。DNS の設定の変更やフォームの改修が必要になった場合、どこまでがプランの対象になるかはご契約の際に確認し、範囲を超える作業は内容を伺ったうえで別途ご相談となります。料金は月額制の個別見積りです。