メール・運用NOTE 18 / OPERATION

お問い合わせフォームのメールがGmailに届かない原因は?SMTP設定を解説

お問い合わせフォームのメールがGmailに届かない原因を切り分け。フォーム設定、SMTP認証、送信元アドレス、SPF・DKIMなどの確認ポイントを解説します。

お問い合わせフォームを作ってテストしたのに、送信完了画面は表示されるのにGmailへメールが届かない。PHPにも大きなエラーは出ていないため、「フォームのコードが間違っているのか」「Gmail側に拒否されているのか」がわからず困るケースがあります。特に初めてPHPのお問い合わせフォームを案件へ導入すると、画面が正常に動くこととメールが正常に届くことを同じ問題として考えてしまいがちです。

結論からいうと、お問い合わせフォームからGmailへメールが届かない原因は、PHPだけとは限りません。送信先アドレスの間違い、迷惑メール判定、SMTP認証の失敗、Fromの設定、SPF・DKIMなどのメール認証、サーバー側の制限など、メールがユーザーの受信トレイへ到達するまでには複数の要素が関係します。

この記事では、お問い合わせフォームのメールがGmailに届かないときに確認したいポイントを、フォーム側・SMTP側・Gmail側に分けて解説します。PHPとPHPMailerを使ったSMTP送信の考え方や、Gmailを利用する際の注意点も紹介するので、原因を一つずつ切り分けていきましょう。

お問い合わせフォームからGmailへ届かないときは送信処理とメール配送を分けて考える

お問い合わせフォームで「送信完了」と表示されたからといって、必ずGmailの受信トレイまでメールが届いたとは限りません。フォーム側では入力値の受付やPHPの処理が正常に完了していても、その後のメールサーバーへの接続、送信認証、配送、受信側の判定といった別の段階で問題が発生する可能性があります。

Google Workspaceの公式ヘルプでも、お問い合わせフォームからのメールがGmailへ届かない場合、問題の原因がフォームそのものではなく、メール配信システムによる送信方法にあるケースを案内しています。特にSMTP、SPF、DKIMなど、送信元を正しく認証できているかは重要な確認ポイントです。

そのため、最初からPHPコード全体を書き直すのではなく、「PHPは送信処理まで進んでいるか」「SMTPへ接続できているか」「Googleのメールサーバーまで届いているか」「届いたあと迷惑メール扱いされていないか」というように段階を分けて調査します。メール未着は、原因を切り分けることが解決への近道です。

Gmailに届かない場合は最初にフォーム側の設定ミスを確認する

SMTPやDNSの設定を確認する前に、まずお問い合わせフォーム側の基本設定を見直しましょう。送信先メールアドレスのタイプミスや、設定ファイルの変更漏れなど、単純な原因でメールが届いていないケースもあります。特にテンプレートを別案件へコピーした場合は、以前の案件のメールアドレスが残っていないか確認します。

送信先メールアドレスが正しいか確認する

管理者通知メールの送信先が正しいGmailアドレスになっているか確認します。文字列として設定されている場合は、余分なスペースやタイプミスがないかも見ておきましょう。複数の受信先を設定している場合は、それぞれのアドレスが正しく処理されているかも確認します。

また、自動返信メールが届かない場合は、管理者側の送信先ではなく、ユーザーがフォームへ入力したメールアドレスが正しくPHPへ渡っているかを確認します。管理者通知と自動返信では送信先が異なるため、どちらだけが届かないのかを整理すると原因を絞り込みやすくなります。

フォームからメールアドレスを正しく取得できているか確認する

HTML側でname="email"としているのに、PHP側で別の名前を参照していると、入力されたメールアドレスを取得できません。入力項目を変更したあとにPHP側の設定を修正し忘れると起こりやすい問題です。

PHP側では、たとえば次のように値を取得して形式を確認できます。

<?php
$email = trim($_POST['email'] ?? '');

if ($email === '') {
    $errors[] = 'メールアドレスを入力してください。';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'メールアドレスの形式を確認してください。';
}
?>

送信処理のエラーを確認する

「完了画面へ移動した」という事実だけでは、メール送信が成功した証拠にはなりません。実装によっては、メール送信処理が失敗していても完了画面へ進んでしまうことがあります。

確認したいポイントは次の通りです。

  • メール送信処理の戻り値や例外を確認しているか
  • SMTP接続時にエラーが出ていないか
  • PHPのエラーログに問題が記録されていないか
  • 管理者通知と自動返信のどちらが失敗しているか
  • 本番サーバーでも同じ症状が発生するか

開発中は必要に応じてPHPMailerなどのデバッグ情報を確認し、どの段階で処理が止まっているのかを調べます。ただし、本番公開時に認証情報や詳細なエラー情報をユーザーへ表示したままにしないよう注意しましょう。

まず「フォームの送信処理そのものが失敗している」のか、「送信したメールがGmailへ配送されていない」のかを分けるだけでも、調査範囲を大きく絞れます。

SMTP設定を使うと認証されたメールサーバー経由で送信できる

SMTPはメールを送信するために使われる仕組みです。PHPのお問い合わせフォームでは、サーバー環境に依存した単純なメール送信ではなく、SMTPサーバーへ接続して認証したうえでメールを送信する構成があります。PHPMailerなどのライブラリを利用すると、PHPからSMTPへ接続する処理を組み込みやすくなります。

SMTPでは接続先と認証情報を設定する

SMTPを利用する場合は、使用するメールサービスに合わせて接続情報を設定します。具体的な値はサービスごとに異なるため、利用するメールサービスの公式情報を確認することが基本です。

一般的には次のような設定項目があります。

  • SMTPサーバー名
  • SMTPポート番号
  • SMTPユーザー名
  • 認証に利用する情報
  • TLSなどの暗号化方式

これらのどれかが間違っていれば、SMTPサーバーへ正常に接続できない可能性があります。別案件から設定ファイルをコピーした場合は、以前の認証情報が残っていないかも確認しましょう。

また、SMTPのパスワードや認証情報は、ブラウザーから閲覧できるHTMLやJavaScriptへ記述してはいけません。PHPなどサーバー側で扱い、公開リポジトリへ誤ってアップロードしないよう管理します。

PHPMailerを使ってSMTP送信する方法がある

PHPMailerは、PHPからメールを送信するために利用されているライブラリの一つです。SMTP接続、認証、HTMLメールなど、メール送信に必要な処理を扱えます。

実際の設定値は利用環境によって異なりますが、構造としては次のようにSMTPを有効にして接続情報を設定します。

<?php
$mail->isSMTP();
$mail->Host = 'SMTPサーバー名';
$mail->SMTPAuth = true;
$mail->Username = 'SMTPユーザー名';
$mail->Password = 'SMTP認証情報';
$mail->Port = 587;
?>

SMTP認証が失敗する場合は認証情報を確認する

SMTPへ接続できても、ユーザー名や認証情報が間違っていれば送信できません。パスワードを変更したあとや、別のメールアカウントへ切り替えたあとなどは、フォーム側の設定も更新されているか確認します。

特にGmailを使う場合は、通常のGoogleアカウントのパスワードをそのまま第三者アプリのSMTP認証へ入力すればよいとは限りません。Googleアカウントのセキュリティ設定や、利用する認証方法に合わせた準備が必要です。

GmailのSMTPを使う場合はGoogleアカウント側の設定も確認する

お問い合わせフォームからGmailのSMTPを使ってメールを送信する場合、PHPやPHPMailer側の設定だけで完了するとは限りません。Googleアカウント側で利用できる認証方法や、組織アカウントの場合は管理者側のポリシーも関係します。

アプリパスワードを使える場合は2段階認証が前提になる

Googleには、通常のパスワードとは別に「アプリ パスワード」という仕組みがあります。Googleの案内では、アプリパスワードを作成するには2段階認証プロセスが有効になっている必要があります。ただし、Googleは可能な場合には「Googleでログイン」など、より安全な認証方法を利用することを推奨しています。

また、すべてのGoogleアカウントでアプリパスワードを利用できるわけではありません。職場・学校などの組織アカウント、高度な保護機能を利用している場合など、アプリパスワードの項目が表示されないケースがあります。案件では「Gmailなら必ずアプリパスワードが使える」と決めつけず、実際のアカウント環境を確認しましょう。

Googleアカウントの通常パスワードをコードへ直接保存しない

フォームからGmailを利用するために、普段GoogleへログインしているパスワードをPHPへそのまま書けばよいという考え方は避けましょう。認証方式はGoogle側の現在の仕様に合わせる必要があります。

特にクライアント案件では次の点を整理します。

  • どのGoogleアカウントを送信に利用するか
  • 利用可能な認証方式は何か
  • 認証情報を誰が管理するか
  • 担当者変更時に設定を引き継げるか
  • Google Workspaceの場合は管理者設定に制限がないか

制作担当者個人のGmailアカウントをクライアントサイトの恒久的な送信元として使うと、納品後の管理が難しくなります。公開後に誰がアカウントを管理するのかまで考えて設定しましょう。

FreelanceFormではPHPとPHPMailerによるSMTP送信を採用し、Gmailを利用する場合の設定手順もドキュメントにまとめています。対応している主な機能はお問い合わせフォームの機能一覧から確認できます。

Googleアカウントのパスワード変更後も確認する

認証方法によっては、Googleアカウント側のパスワードやセキュリティ設定を変更したことで、それまで動いていた送信設定が使えなくなる場合があります。以前は届いていたのに突然届かなくなった場合は、コードだけでなくアカウント側で最近変更した設定がないかも確認します。

Webサイト側のコードに変更がなくても、メールサービス側の設定変更によって送信できなくなる可能性があります。公開後のフォームでは、定期的なテストや問い合わせ状況の確認も運用の一部として考えましょう。

Gmailへ送ったメールが迷惑メールになる場合はSPF・DKIMなどの認証も確認する

SMTP送信処理そのものは成功しているのに、Gmailの受信トレイに表示されない場合があります。そのときは迷惑メールフォルダを確認するとともに、送信元ドメインのメール認証も確認します。Gmailは受信したメールについて、迷惑メールや不正な送信でないかを判定しています。

SPFはその送信元からメールを送ってよいか示す仕組み

SPFは、あるドメインのメールをどのサーバーから送信してよいかをDNS上で示す仕組みです。フォームから独自ドメインのメールアドレスを送信元として利用している場合、その送信経路がドメイン側で適切に認証されているかが関係します。

たとえば自社ドメインから複数のメールサービスを利用している場合は、利用している送信元を正しく反映する必要があります。SPFレコードを適当に追加したり、複数のSPFレコードを無計画に作ったりせず、現在利用しているメールサービスの公式手順に沿って設定します。

DKIMはメールに電子的な署名を付けて送信元を確認する

DKIMはメールへ電子的な署名を付け、受信側が送信元ドメインとの整合性を確認できるようにする仕組みです。利用するメールサービスによって、DNSへ必要なレコードを追加するなどの設定を行います。

Gmailに届かない場合に確認したい要素を整理すると、次のようになります。

  • 迷惑メールフォルダへ振り分けられていないか
  • SPFの設定が送信環境と一致しているか
  • DKIMが利用環境に合わせて設定されているか
  • Fromのドメインと実際の送信方法に不自然な点がないか
  • メールサービスやサーバーからエラーが返っていないか

お問い合わせフォームのPHPだけを修正しても、DNSやメール認証側に原因があれば問題は解決しません。「フォームはメールを作る場所」「メールサーバーは配送する場所」と分けて考えると原因を整理しやすくなります。

特に独自ドメインのメールをクライアントが利用している場合は、既存のメール環境へ影響を与えないよう注意してDNS設定を変更しましょう。

DMARCも送信ドメインの認証と関係する

DMARCはSPFやDKIMによる認証結果を利用し、認証に失敗したメールを受信側でどのように扱うかを指定する仕組みです。ドメイン側で厳しいDMARCポリシーが設定されている場合、送信方法と認証が一致していないメールが拒否される可能性があります。

メール認証はフォームだけの問題ではなく、そのドメイン全体のメール運用に関係します。制作案件で設定を変更する場合は、現在利用しているメールサービスやDNSの状態を確認し、不明な場合はサーバー・メールサービスの管理者へ確認してから作業しましょう。

Fromにユーザーのメールアドレスを設定するとGmailで問題になる場合がある

お問い合わせフォームを作るとき、管理者通知メールのFromへ「フォームに入力されたユーザーのメールアドレス」を設定したくなることがあります。そうすれば受信したメールにそのまま返信できそうに見えるからです。しかし、フォーム利用者のメールアドレスと実際にメールを送信しているサーバーは別物です。

Fromは実際の送信環境に合わせる

たとえばWebサイトがexample.jpのSMTPサーバーから送信しているのに、ユーザーが入力したsomeone@gmail.comをFromとして設定すると、Gmailから送信されていないのにGmailアドレスを送信元として名乗る形になります。

メール認証との整合性を考えると、Fromには実際の送信環境で利用するアドレスを設定し、ユーザーへ返信したい場合は別の仕組みを利用する方が整理しやすくなります。

ユーザーへの返信にはReply-Toを使う方法がある

管理者通知を受信したあと、そのまま問い合わせ者へ返信したい場合には、問い合わせ者のメールアドレスをReply-Toとして設定する方法があります。これならメール自体の送信元と、返信時の宛先を分けて管理できます。

考え方としては次のように分けます。

  • From:メールを実際に送信するサイト側のアドレス
  • To:お問い合わせ通知を受け取る管理者
  • Reply-To:管理者が返信するときの問い合わせ者アドレス

ただし、ユーザー入力をメールヘッダーへ利用する場合は、想定したメールアドレス形式になっていることをサーバー側で十分に確認してから使用します。

メールが届くことだけを目的にするのではなく、送信元の認証と、公開後にクライアントが返信しやすい運用の両方を考えましょう。

自動返信メールも送信元の考え方は同じ

ユーザーへ自動返信メールを送る場合も、サイトや企業側の適切な送信元アドレスを設定します。問い合わせ者自身のアドレスから問い合わせ者へ送るような不自然な構成にする必要はありません。

管理者通知と自動返信で「誰から誰へ送るメールなのか」を紙に書き出すと、From・To・Reply-Toの関係を整理しやすくなります。

Gmailに届かない原因は順番に切り分けると見つけやすい

お問い合わせフォームのメールが届かないとき、SMTP、PHP、DNS、Gmailをすべて同時に変更すると、どの修正で直ったのかわからなくなります。まずフォームから値を受け取れているか、次に送信処理が成功しているか、その次にメールサーバーへ接続できているかという順番で確認します。

まず管理者通知と自動返信のどちらが届かないか確認する

管理者通知は届くのに自動返信だけ届かないなら、SMTPそのものは動作していて、自動返信側の送信先や処理に問題がある可能性があります。逆に両方届かなければ、SMTP接続や共通の送信設定などを先に確認できます。

このように「全部届かない」ではなく、どこまで正常なのかを調べることで原因を絞り込めます。

テストする項目を一つずつ分ける

お問い合わせフォームのメール未着では、次の順番で確認すると整理しやすくなります。

一つ確認するたびに結果を記録しておくと、クライアント案件でサーバー会社やメール管理者へ問い合わせる際にも状況を説明しやすくなります。

  • フォームから入力内容を正しく取得できているか
  • PHPの送信処理でエラーが発生していないか
  • SMTP認証に成功しているか
  • 別の受信先メールアドレスでも届かないか
  • Gmailの迷惑メールフォルダへ入っていないか

ここまで正常なら、SPF・DKIMなどメール認証やDNS側の状態も確認します。Google Workspaceを利用している組織では、管理者がメールログなどを使って配送状況を確認できる場合もあります。

重要なのは、推測だけで設定を変更し続けないことです。「どこまで届いているのか」という事実を一つずつ集めて原因を特定します。

公開前に複数のメール環境でテストする

自分のGmailに一度届いただけで公開するのではなく、可能であればクライアントが実際に利用するメールアドレスでも確認します。自動返信についてもGmailだけでなく別のメール環境でテストしておくと、特定の受信環境だけで問題が起きていないか確認できます。

FreelanceFormではPHP対応サーバーへの設置からSMTP設定までを導入手順としてまとめています。初めてフォームを本番環境へ設置する場合は、お問い合わせフォームの導入方法も参考にしてください。

提言:お問い合わせフォームは「送信できた」ではなく「届いた」まで確認しよう

お問い合わせフォーム制作では、送信ボタンを押して完了画面が表示されると作業が終わったように感じます。しかしクライアントにとって重要なのは、その画面が動いたことではなく、実際のお問い合わせが確実に確認できることです。メールが届かなければ、せっかく獲得した問い合わせを見逃す可能性があります。

だからこそWebデザイナーは、HTMLやPHPだけでなく、SMTP、送信元アドレス、メール認証、本番環境での受信確認までをフォーム導入の範囲として考えることが大切です。すべてのメール技術を専門家レベルで理解する必要はありませんが、問題が起きたときに「フォーム側なのか、送信側なのか、受信側なのか」を切り分けられるだけでも対応力は大きく変わります。

FreelanceFormは、フォームのコードだけでなく、Gmailを利用する際の送信設定や導入手順までまとめて使えるように設計しています。「メール設定がわからないからフォーム案件を受けられない」を減らしたい方は、FreelanceFormの特徴・強みも確認してみてください。

お問い合わせフォームがGmailに届かない場合のよくある質問

お問い合わせフォームからGmailにだけメールが届かないのはなぜですか?

迷惑メール判定や送信元認証など、Gmail側でのメール判定が関係している可能性があります。まず迷惑メールフォルダを確認し、フォームから正常に送信処理が行われているかを確認してください。

送信処理が成功している場合は、SMTP設定、From、SPF、DKIMなども確認します。別のメールアドレスには届くのかをテストすると、Gmail固有の問題なのかフォーム全体の問題なのか切り分けやすくなります。

GmailのSMTPを使えば必ずメールが届くようになりますか?

SMTPを利用したからといって、すべてのメールが必ず受信トレイへ届くことを保証できるわけではありません。SMTPは認証してメールを送信するための仕組みであり、受信側ではその後も迷惑メール判定などが行われます。

SMTP設定に加えて、送信元アドレスやメール認証、メール本文、ドメインの状態などもメール配送に関係します。本番環境で実際に送信テストを行うことが重要です。

GmailのSMTPにはGoogleアカウントの通常パスワードを使いますか?

認証方法によって異なり、通常のGoogleアカウントのパスワードをそのままコードへ入力することを前提にはしません。Googleではアプリパスワードを利用できる場合がありますが、作成には2段階認証が必要で、アカウントの種類やセキュリティ設定によって利用できない場合もあります。

Google側の認証仕様は変更される可能性もあるため、実際に設定する際はGoogleの最新の公式案内と利用するアカウントの設定を確認してください。

送信完了画面が表示されればメール送信にも成功していますか?

必ずしも成功しているとは限りません。実装によっては、メール送信処理の成否にかかわらず完了画面へ移動することがあります。そのため、完了画面だけで判断しないようにしましょう。

管理者通知と自動返信が実際に受信できているか、PHPやSMTPでエラーが発生していないかを確認します。クライアント案件では、本番サーバーと実際の受信先メールアドレスを使ったテストが必要です。

お問い合わせフォームのFromには入力されたユーザーのGmailを設定してもいいですか?

問い合わせ者が入力したアドレスをそのままFromへ設定すると、実際にメールを送信しているドメインとの整合性が取れず、メール認証上の問題につながる場合があります。

Fromには実際の送信環境に適したサイト側のアドレスを使用し、管理者がそのまま問い合わせ者へ返信したい場合は、検証済みのユーザーアドレスをReply-Toへ設定する方法があります。

まとめ:Gmail未着はフォーム・SMTP・認証を順番に確認する

お問い合わせフォームからGmailへメールが届かない場合は、PHPコードだけを見るのではなく、送信先アドレス、SMTP認証、FromとReply-To、迷惑メール判定、SPF・DKIMなど複数の要素を確認する必要があります。まず「フォームが動くこと」と「メールがGmailまで配送されること」を別の工程として考えることが重要です。

一度にすべての設定を変更するのではなく、フォームから値を取得できているか、SMTPへ接続できているか、管理者通知と自動返信のどちらが届かないかという順番で切り分けましょう。お問い合わせフォームは送信完了画面が出たら完成ではありません。実際の受信先へメールが届き、クライアントが問い合わせを確認できるところまでテストして初めて公開できる状態になります。

THANKS FOR READING.ページの先頭へ
YOUR NEXT STEPFROM KNOWING TO MAKING. ↗

学んだことを、
次の制作案件へ。

フォームの土台があれば、デザインにもっと向き合える。HTML・CSSで編集できる、買い切りのお問い合わせフォーム。

FreelanceFormを見てみる HTML・CSSで編集 / 10デザイン / 買い切り