初心者でも安心なPHPを使ったメールフォームの作り方を紹介

メールフォーム

プログラミング言語のなかでも、比較的簡単で覚えやすい言語として挙げられるのが「PHP」です。メールフォームの作成に際しては、このPHPとHTMLという2種類の言語を使用すればシンプルなフォームを作成できます。しかし、そのような側面を持ちつつも、ある程度の専門知識がなければ扱うことすら難しい、という事実もあるのです。
今回紹介するメールフォームの作り方とPHPとの関係性について把握しておけば、PHPを用いてメールフォームを作成するための基本的な知識を身に付けられるでしょう。また、専門的な知識やスキルがなくてもメールフォームを作成できる「フォーム作成ツール」についても併せて紹介します。

なお、2026年10月には、PHP本体に遠隔から任意のコードを実行されるおそれのある深刻な脆弱性(通称「PHP2shell」)が公表されました。PHPで自作したメールフォームや、配布されているPHPのメールフォームスクリプトは、コードを正しく書いていても、サーバーのPHPを修正版に更新しなければ影響を受けるおそれがあります。対応方法は、記事後半の「PHPで自作したメールフォームを運用するときの注意点(PHP2shell)」で解説しています。

フォーム作成ツールとしては、多機能でセキュリティ対策にも力を入れている「クライゼルのフォーム作成ツール」のご利用がおすすめです。月額1万円(税別)から使えるクライゼルのカタログはこちらからダウンロードいただけます。

この記事の著者
服部誠

トライコーン(株)
Senior Vice President of Marketing。
同社 元取締役COO
Web広告、CRM、CDP、データ可視化などお客様のWebマーケティングの課題解決に長年従事。
Salesforce Marketing cloud メールスペシャリスト / アドミニストレータ / コンサルタントおよび、Salesforce アドミニストレータの各認定資格を保持。
Markezine Dayでの登壇や、自社ウェビナー、共催セミナーでの登壇実績多数。

服部誠をフォローする

PHPを使ったフォーム作成の仕組み

PHPのコード

まずは、メールフォーム作成の仕組みについて、PHPとHTML双方の観点から見ていきましょう。併せて、メールフォームが持つ役割についても解説します。

動的なフォーム作成にPHPは必須

メールフォームとは、簡潔に述べると「フォームに入力されたユーザー情報をサーバー経由でWebサイトの管理人に送信する」役割を担っているWEBアプリケーション技術です。大まかに、「入力フォーム」「確認画面」「完了画面」の3つで構成されます。

入力フォームは、ユーザーが情報を入力するページで、設置するフォームの目的に応じて入力項目が変わりますが、ユーザーの負担が大きくならない程度の項目に抑えておくと効果的です。
確認画面は、ユーザーが入力した情報を確認し、間違いがないか、修正したい項目がないかなどを情報送信前に確認できるページで、ユーザーの安心感につながるページといえます。必ずしも設置しなくて良いものですが、ユーザビリティを考慮するのであればほぼ必須ともいえるページです。
完了画面については、情報送信が完了した旨とともに、フォームの設置目的に応じた情報が表示されるページとなります。設置目的が「お問い合わせ」であれば「お問い合わせいただいたことへの感謝」であったり、「購入申込み」であれば「受付番号」であったりと、その内容は多岐にわたるでしょう。

このように、メールフォームはユーザーが入力した内容に応じて表示される結果が変化するWebページです。別名「動的なWebページ」と呼びますが、PHPはページの内容が変化するよう処理を行う役割を担っています。つまり、メールフォームの作成に際してPHPは必須要素といえるのです。

※PHP以外のプログラミング言語を利用して作成することも可能です。

フォーム作成におけるPHPとは

続いて、メールフォームの作成におけるPHPの役割や特徴について補足して解説します。

PHPは動的なWebページの作成に必要となるプログラミング言語ですが、それ以外にもいくつか役割があります。

例えば、「静的なWebページ」を形成するHTMLに組み込むことで「動的なWebページ」に変化させられます。また、PHPはユーザー側のブラウザ上ではなく、サーバー側で処理される点も特徴の一つです。そのため、PHPで作ったメールフォームを安全に使い続けるには、サーバーにインストールされているPHPそのものを最新の修正版に保つ必要があります。

フォーム作成におけるHTMLとは

PHPと並んでメールフォームの作成に欠かせないHTMLは、メールフォーム本体を構成している要素です。ユーザーの入力などによる何らかの働きかけによってページの内容が変化するわけではなく、Webページの「見た目づくり」に使用される静的な言語(マークアップ言語)となります。

例えば、「<h2>」というタグで文字を囲むことにより「見出し」になったり、「<p>」というタグで文字を囲むことで「段落」が発生したりするのです。

PHPによるフォーム作成で必要な関数

次に、PHPを用いたメールフォームの作成に際して必要となる関数について少し触れていきます。

例えば、ユーザーがメールフォームでの入力を完了した際に、その通知をユーザーや運営者に対してメール送信するには「mail関数」や「mb_send_mail関数」などが利用されます。

mail関数

mail関数は、メールを送信するために必要となる関数です。「宛先」「件名」「メッセージ」「ヘッダ」の4項目で構成されます。実際に、サンプルコードを見てみましょう。

<?php
  $to = "to@example.com";
  $subject = "TEST";
  $message = "This is a test.";
  $headers = "From: from@example.com";

  mail($to, $subject, $message, $headers);
?>

実際に送信されるメールのイメージは以下の通りとなります。

差出人:from@example.com
宛先:to@example.com
件名:TEST
This is a test.

それぞれ、「差出人=headers」「宛先=to」「件名=subject」「メッセージ=message」となります。

mb_send_mail関数

mb_send_mail関数も、mail関数と同様にメールを送信するために必要となる関数となります。書くコードもほとんど変わりませんが、mail関数の欠点である「日本語の文字化け」解消に役立つ関数です。日本語は「マルチバイト文字(全角文字)」となるため、必要な措置を行わないと文字化けしてしまう恐れがありますが、mb_send_mail関数を使うと日本語での送信が可能となります。実際にコードを見てみましょう。

<?php
  mb_language("Japanese");
  mb_internal_encoding("UTF-8");

  $to = "to@example.com";
  $subject = "テスト送信";
  $message = "これはテストメールです。";

  $fromEmail = "from@example.com";
  $fromName = "差出人名";

  $headers = "From: " . mb_encode_mimeheader($fromName) . " <" . $fromEmail . ">";

  mb_send_mail($to, $subject, $message, $headers);
?>

日本語利用が主となることが想定される場合は、mb_send_mail関数の利用がおすすめです。

PHPを使ったフォーム作成の流れ

メールフォーム作成の流れ

続いて、PHPを使ったメールフォーム作成の流れを見ていきましょう。大きく分けて、「入力画面の作成」「確認画面の作成」「完了画面の作成」となります。

①PHPで入力画面を作成

まずは、メールフォームの入力画面を作成します。最低限、「名前」「メールアドレス」「お問い合わせ内容」を入力する項目と、送信ボタンは準備しておきます。

以下は、確認画面を挟まずに、入力画面から直接通知メールを送る最小構成のサンプルです。差出人(From)にはフォームに入力されたメールアドレスを使わず、固定のアドレスを指定しています。入力されたアドレスをそのままメールのヘッダーに使うと、ヘッダーを改ざんされて迷惑メールの送信に悪用されるおそれがあるためです。

<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // フォームからのデータを取得
  $name = $_POST["name"] ?? "";
  $email = $_POST["email"] ?? "";
  $message = $_POST["message"] ?? "";

  // 入力値のバリデーション
  if (empty($name) || empty($email) || empty($message)) {
    $error_message = "全ての項目を入力してください。";
  } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $error_message = "メールアドレスの形式が正しくありません。";
  } else {
    // メールの送信
    $to = "your-email@example.com"; // 送信先のメールアドレスを指定
    $subject = "お問い合わせがありました";
    $message_body = "名前: " . $name . "\n";
    $message_body .= "メールアドレス: " . $email . "\n";
    $message_body .= "お問い合わせ内容:\n" . $message;
    $headers = "From: form@example.com"; // 差出人は固定のアドレスにする

    if (mb_send_mail($to, $subject, $message_body, $headers)) {
      $success_message = "お問い合わせを受け付けました。ありがとうございます!";
    } else {
      $error_message = "メールの送信に失敗しました。後でもう一度お試しください。";
    }
  }
}
?>
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>お問い合わせフォーム</title>
</head>
<body>
  <h1>お問い合わせフォーム</h1>
  <?php if (isset($error_message)): ?>
    <p style="color: red;"><?php echo $error_message; ?></p>
  <?php endif; ?>
  <?php if (isset($success_message)): ?>
    <p style="color: green;"><?php echo $success_message; ?></p>
  <?php endif; ?>
  <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, 'UTF-8'); ?>">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name" required><br>
    <label for="email">メールアドレス:</label>
    <input type="email" id="email" name="email" required><br>
    <label for="message">お問い合わせ内容:</label><br>
    <textarea id="message" name="message" rows="5" required></textarea><br>
    <input type="submit" value="送信">
  </form>
</body>
</html>

詳細なサンプルコードなどについては、以下の記事をご参照ください。

②PHPで確認画面を作成

続いて、PHPを用いてユーザーが入力内容(今回は「名前」「メールアドレス」「お問い合わせ内容」)を確認できる確認画面を作成します。入力画面で受け取った値をセッションに保存しておき、確認画面で表示する構成です。この際、必要となるコードのサンプルは以下の通りです。

画面に表示する値と、送信用に引き継ぐ値(hidden)は、htmlspecialchars関数でエスケープ処理しています。エスケープ処理をしないと、入力欄に埋め込まれた不正なスクリプトが実行されるクロスサイトスクリプティング(XSS)のおそれがあります。

<?php
session_start();

// セッションからデータを取得し、表示用にエスケープ処理する
$name = htmlspecialchars($_SESSION["name"] ?? "", ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($_SESSION["email"] ?? "", ENT_QUOTES, 'UTF-8');
$message = htmlspecialchars($_SESSION["message"] ?? "", ENT_QUOTES, 'UTF-8');

// フォームのデータが送信された場合の処理
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // ここでメール送信やデータベースへの保存などの処理を行います。
  // お問い合わせが完了したらセッションをクリア
  session_unset();
  session_destroy();
  // 完了画面にリダイレクト
  header("Location: complete.php");
  exit();
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>お問い合わせフォーム - 確認</title>
  </head>
  <body>
    <h1>お問い合わせフォーム - 確認</h1>
    <h2>入力内容をご確認ください</h2>
    <p><strong>名前:</strong> <?php echo $name; ?></p>
    <p><strong>メールアドレス:</strong> <?php echo $email; ?></p>
    <p><strong>お問い合わせ内容:</strong> <?php echo $message; ?></p>
    <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, 'UTF-8'); ?>">
      <input type="hidden" name="name" value="<?php echo $name; ?>">
      <input type="hidden" name="email" value="<?php echo $email; ?>">
      <input type="hidden" name="message" value="<?php echo $message; ?>">
      <input type="submit" value="送信">
    </form>
  </body>
</html>

上記のコードで確認画面を作成すると、以下のようなWebページが生成されます。

お問い合わせフォーム – 確認

名前 ○○
メールアドレス ○○
問い合わせ内容 ○○

【送信ボタン】

送信ボタンを押下して実際にメールが送信されるようにするためには、別途コードを書く必要がある点を併せて把握しておきましょう。

③HTMLで完了画面を作成

最後に、完了画面を作成します。入力内容は確認画面で処理済みのため、完了画面は送信完了を伝えるだけのシンプルなHTMLで作成できます。サンプルコードは以下の通りです。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>お問い合わせフォーム - 完了</title>
  </head>
  <body>
    <h1>お問い合わせフォーム</h1>
    <h2>お問い合わせが完了しました!</h2>
    <p>お問い合わせいただき、ありがとうございます。内容を確認のうえ、担当者よりご連絡いたします。</p>
    <p><a href="/">トップページに戻る</a></p>
  </body>
</html>

例えばこのようなコードを書くことで、メールフォームの入力者側に向けて表示される完了画面が生成されます。

AIでプログラムを生成する

ここまでPHPのプログラムをご紹介しましたが、今やGeminiやClaude、ChatGPTでプログラムを簡単に生成することが出来ます。

以下はGemini Canvasモードで生成してもらったお問い合わせフォームです。

お問い合わせ入力画面

geminiで作成したお問い合わせフォームデザイン

お問い合わせ確認画面

geminiで作成したお問い合わせフォーム確認画面デザイン

お問い合わせ完了画面

geminiで作成したお問い合わせフォーム完了画面デザイン

もちろん、それぞれソースコードも出してくれます。以下は入力画面のソースコードです。

geminiで作成したお問い合わせフォームHTML

プログラムを生成するだけでは、フォームを公開できないため、サーバーに上げたり、DNSの紐づけを行ったりすることが必要です。また、AIが生成したコードでも安全性は保証されないため、エスケープ処理などの対策が入っているかを確認したうえで使いましょう。公開後は、サーバーのPHPを最新の修正版に保つ運用も必要です。

サーバーがない場合や、作り方が分からない場合は、フォーム作成ツールを利用するとサーバーの用意いらずのため、手軽で簡単です。

PHPで自作したメールフォームを運用するときの注意点(PHP2shell)

2026年10月、プログラミング言語「PHP」に、遠隔から任意のコードを実行されるおそれのある深刻な脆弱性(CVE-2026-109618、CVE-2026-109619。通称「PHP2shell」)が公表されました。IPA(情報処理推進機構)は、修正版の適用が難しい場合には、外部からのアクセス遮断やサービスの一時停止も含めて判断するよう呼びかけています。また、サポートが終了したPHP 8.1以前のバージョンには修正版が提供されないとしています(参考:IPA「PHPの脆弱性対策について(CVE-2026-109618、CVE-2026-109619:PHP2shell)」)。

メールフォームが影響を受けやすい理由

メールフォームは、インターネット上の誰からでもデータを受け付けるページです。今回の脆弱性はフォームのプログラムではなくPHP本体にあるため、この記事のコード例のようにエスケープ処理などの対策をしていても、サーバーのPHPが修正前のままでは防げません。

インターネット上で配布されているPHPのメールフォームスクリプト(いわゆるフォームメーラー)を設置している場合も同じです。スクリプトが最新版であっても、動かしているサーバーのPHPが古ければ影響を受けるおそれがあります。

自作メールフォームで必要になる対応

PHPで動くメールフォームを公開している場合は、次の対応が必要です。

  • 利用中のPHPのバージョンを確認する(レンタルサーバーの場合は、管理画面のPHP設定やサーバー会社のお知らせで確認できます)
  • 修正版が提供されているバージョンに更新する。PHP 8.1以前を使っている場合は、サポート中のバージョンへの移行が必要です
  • 配布スクリプトを使っている場合は、配布元の更新情報も確認し、新しいPHPに対応した版に入れ替える
  • PHPの更新後に、フォームの入力・確認・送信と通知メールが正常に動くかを確認する
  • すぐに対応できない場合は、IPAの呼びかけに沿って、フォームの公開停止も含めて判断する

PHPのバージョンを上げると、古い書き方のコードやスクリプトが動かなくなり、改修や入れ替えが必要になる場合もあります。脆弱性はいつ公表されるか予測できないため、自作のメールフォームを運用し続けるには、こうした緊急対応ができる担当者と時間をあらかじめ確保しておく必要があります。

お問い合わせフォームをPHPで自作する場合の注意点は、以下の記事でも解説しています。

サーバーやPHPの管理を自社で行わずにメールフォームを運用したい場合は、クラウド型のフォーム作成ツールが選択肢になります。クライゼルの機能や料金は、サービスカタログ(無料)でご確認いただけます。

フォーム作成ツールで初心者も簡単に作れる

フォーム作成ツールのイメージ

ここまで、メールフォームの作成に必要な要素や実際のコード例などを紹介してきましたが、慣れるまではこうしたコードを書くのに苦労することでしょう。そのような方にとって、「フォーム作成ツール」は非常に便利です。最後に、フォーム作成ツールのメリットと、おすすめのツールである「クライゼル」について紹介します。

フォーム作成ツールとは?メリットは?

コードを書く専門知識がなくても簡単に作成ができるツールです。今回紹介したような長いコードを自社内で作成する必要がないため、プログラミングのスキルを有した人材や、関連するノウハウが育っていなくても安心して作成できます。

また、クラウド型のツールであれば、サーバーの用意やPHPの更新を自社で行う必要がありません。

無料で利用できるものから、有料で利用できるものまで多くのツールがありますが、カスタマイズ性やセキュリティ対策を考慮するのであれば有料のフォーム作成ツールを利用すると良いでしょう。

おすすめのフォーム作成ツールはクライゼル

トライコーン株式会社が提供している「クライゼル」は、シンプルな管理画面や充実したセキュリティ機能などを有した高機能のCRMプラットフォームです。フォーム作成機能では、フォーム自動生成モードを使えばコーディングなしでフォームを作成でき、デザインモードではHTML・CSS・JavaScriptで自由にデザインできます。

クライゼルのサーバーなどのITインフラはトライコーンが管理・運用するため、お客様がPHPのバージョンを管理する必要はありません。PHP2shellのような脆弱性が公表されるたびに、自社でサーバーの更新やフォームの動作確認を行う負担を減らせます。

利用される方向けに、カスタマーサポートをはじめとした各種サポート体制も整っているため、初めてフォーム作成ツールを利用されるという方でも安心してご利用いただけます。

よくある質問

Q. PHPのメールフォームでは、mail関数とmb_send_mail関数のどちらを使えばよいですか?

A. 日本語のメールを送る場合は、mb_send_mail関数がおすすめです。mail関数のままでは、件名や本文の日本語が文字化けするおそれがあります。mb_language関数で言語を”Japanese”に設定してから使うと、日本語のメールを正しく送信できます。

Q. PHPの脆弱性「PHP2shell」は、自作のメールフォームに影響しますか?

A. 影響を受けるおそれがあります。PHP2shellはPHP本体の脆弱性のため、フォームのコードに問題がなくても、サーバーのPHPを修正版に更新しなければ対策できません。サポートが終了したPHP 8.1以前には修正版が提供されないため、サポート中のバージョンへの移行が必要です。

Q. 配布されているPHPのメールフォーム(フォームメーラー)を使っている場合も、対応が必要ですか?

A. 必要です。配布スクリプトもサーバーのPHPで動いているため、PHP本体を修正版に更新する必要があります。あわせて配布元の更新情報を確認し、新しいPHPで正常に動くかを確認してください。

Q. PHPの知識がなくてもメールフォームを作る方法はありますか?

A. フォーム作成ツールを使う方法があります。クライゼルのフォーム自動生成モードなら、コーディングなしでフォームを作成できます。サーバーなどのITインフラはトライコーンが管理・運用するため、お客様がPHPのバージョンを管理する必要はありません。

まとめ

PHPとHTMLを利用することでメールフォームを作成できます。しかし、プログラミングの知識やスキルが乏しい場合、自社内で作成することは困難でしょう。また、PHPで自作したメールフォームは、2026年10月に公表されたPHP2shellのような脆弱性が見つかるたびに、PHPの更新と動作確認を自社で行う必要があります。そのような場合は、無理をせずフォーム作成ツールを利用するのがおすすめです。

特に、「クライゼル」は機能性だけでなく、セキュリティ対策やサポート体制も整った高機能なツールとなっております。
サービス提供開始以来10年以上、無事故のセキュリティを誇るフォーム作成ツール、クライゼルをこの機会にぜひご検討ください。

参考資料

弊社の多彩な業務で使える高セキュリティなCRMプラットフォーム「クライゼル」のカタログは下記からダウンロードいただけます。機能・料金表の記載もありますので、ぜひご覧ください。
クライゼルカタログ資料ダウンロードリンク
シェアする
タイトルとURLをコピーしました