【初心者向け】PHPメールフォームの作り方!基本コードから設置方法まで解説
お問い合わせフォームや資料請求フォームなど、Webサイトでユーザーからの情報を受け取る仕組みとして欠かせない「メールフォーム」。自力で作成したいと考える方も多いですが、実際にコードを書くとなるとハードルが高いと感じるかもしれません。本記事では、初心者向けにPHPを用いたメールフォームの作り方を基礎から解説します。HTMLやPHPの初歩的な知識から、サンプルコードを交えた構築手順、サーバーへの設置方法やエラー対処、カスタマイズのコツまで網羅しているので、ぜひ参考にしてください。
目次
- PHPを用いたメールフォーム作成に必要な基礎知識
- PHPを用いたメールフォームの作り方
- 【サンプル付】簡単なPHPメールフォームの基本コード
- PHPメールフォームの設置方法と注意点
- PHPメールフォームのカスタマイズ
- まとめ
ノーコードでフォームを作成 カスタマーサポートツール「Tayori」
専門知識の必要なく誰でも簡単にお問い合わせフォームが作成できます。まずは資料をご覧ください。
PHPを用いたメールフォーム作成に必要な基礎知識
PHPメールフォームを作るには、HTMLやPHPの基礎だけでなく、サーバー環境について理解しておく必要があります。ここでは大まかに3つの知識を押さえましょう。
HTMLの基本的な知識(フォームの作成)
- フォーム要素:
<form>
タグと、その中で使用する<input>
や<textarea>
、<select>
などのタグの役割を理解しましょう。 - action属性:フォームの送信先を指定します。通常、PHPファイルを指定して入力されたデータを処理します。
- method属性:
method="post"
を使うことが多いです。一般的に機密性の高いデータの送信にはGETよりも適していますが、より安全性を高めるためにはHTTPSなどの対策も大切です。 - submitボタン:ユーザーがボタンを押すと、入力データがPHPスクリプトに送信されます。
このように、HTMLでフォーム画面を構築し、ユーザーからのデータを受け取れる仕組みが必要です。
PHPの基本的な知識(変数の扱い、POST送信、メール送信関数など)
- 変数の宣言・代入:PHPでは先頭に$をつけて変数を宣言します。
例:$name = $_POST['name'];
- $_POST配列:フォームの
method="post"
で送信されたデータを取得します。$_POST['name']
のように、name属性で指定したキーで値を取り出します。 - mail()関数:PHP標準のメール送信関数。
mail($to, $subject, $message, $headers)
の形式で利用します。 - 文字コードやエスケープ:マルチバイト文字の扱いや、ユーザー入力のサニタイズにも留意しましょう。
サーバーの知識(PHPが動作する環境)
- PHP対応のサーバー:レンタルサーバーやVPSなど、PHPがインストールされている環境が必要です。無料のホスティングではPHP非対応の場合もあるので確認が必須。
- sendmail機能:メール送信にmail()関数を使用する場合、サーバー側でsendmailなどのMTA(Mail Transfer Agent)が有効になっている必要があります。
- ファイルのパーミッション:サーバー上でPHPファイルが正しく実行できるように、適切な権限設定を行う必要があります。
これらを押さえておくことで、PHPメールフォームの開発と運用がスムーズに進められます。
PHPを用いたメールフォームの作り方
PHPでメールフォームを作る大まかな流れは以下のとおりです。
- フォームページ(HTML)を用意する
・氏名やメールアドレス、問い合わせ内容などを入力するためのフォームを作成します。
・<form action="send.php" method="post">
のように、送信先のPHPファイルを指定します。 - フォームデータの送信と受け取り
・ユーザーがフォームに入力し「送信」ボタンを押すと、method="post"
で指定したPHPファイル(例:send.php)にデータが送られます。
・PHP側では$_POST['name']
や$_POST['email']
などを使って値を受け取り、変数に格納します。 - バリデーション(入力チェック)
・必須項目が空でないか、メールアドレスの形式が正しいかなどをチェックします。
・問題があれば再入力を促す画面を表示し、問題がなければメール送信処理へ進みます。 - メール送信処理
・mail()関数、もしくはPHPMailerなどのライブラリを使って、指定した宛先(企業側のメールや本人のメールなど)に内容を送信します。
・送信結果(成功・失敗)に応じて、完了画面やエラー画面を表示します。 - 確認画面やサンクスページ(任意)
・本格的なフォームでは、送信前に確認ページを挟んだり、送信後に「完了しました」のメッセージを表示するページを用意したりする場合があります。
これらのステップを順番に実装していけば、シンプルなメールフォームを構築できます。以下では、サンプルコードを用いた具体的な方法を紹介します。
【サンプル付】簡単なPHPメールフォームの基本コード
ここからは、HTMLファイルとPHPファイルの2つに分けたサンプルコードを提示しながら、その役割を解説します。最低限の実装例として、各部の動きを理解しましょう。
なお、このサンプルコードは基本的な動きを理解するためのものとなります。実際に利用する際は情報を守るための適切なセキュリティ対策を行ってください。
HTMLフォームの作成
以下は「index.html」という名前のファイル例です。ユーザーからの入力を受け取る画面を用意します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
</head>
<body>
<h1>お問い合わせフォーム</h1>
<form action="send.php" method="post">
<div>
<label>お名前:</label>
<input type="text" name="name" required>
</div>
<div>
<label>メールアドレス:</label>
<input type="email" name="email" required>
</div>
<div>
<label>お問い合わせ内容:</label><br>
<textarea name="message" rows="5" cols="30" required></textarea>
</div>
<div>
<button type="submit">送信</button>
</div>
</form>
</body>
</html>
name="name"
,name="email"
,name="message"
と設定しておくと、PHP側で$_POST['name']
などで値を受け取れます。- required属性を付けると、未入力の場合にブラウザ側で送信をブロックします(簡易的なバリデーション)。
このフォームにアクセスすると、ユーザーが名前やメールアドレス、問い合わせ内容を入力し、「送信」ボタンを押す仕組みができあがります。
PHPスクリプトの作成
次に「send.php」という名前のPHPファイルを用意します。ユーザーから送信されたデータを受け取り、メールを送信するコード例を示します。
// 文字コード設定(必要に応じて)
mb_language("japanese");
mb_internal_encoding("UTF-8");
// フォームから送信されたデータを受け取る
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
// メール送信先と件名、内容を設定
$to = "example@yourdomain.com"; // 受信したい管理者のメールアドレス
$subject = "お問い合わせ from ".$name;
$body = "以下の内容でお問い合わせがありました。\n"
. "【お名前】\n".$name."\n\n"
. "【メールアドレス】\n".$email."\n\n"
. "【お問い合わせ内容】\n".$message."\n";
// 追加ヘッダー(差出人の情報など)
$headers = "From: ".$email."\r\n";
$headers .= "Reply-To: ".$email."\r\n";
// メール送信(mb_send_mailを使うと文字化け対策になる場合も)
if (mb_send_mail($to, $subject, $body, $headers)) {
echo "<p>送信成功!お問い合わせありがとうございました。</p>";
} else {echo "<p>送信失敗。お手数ですが、再度お試しください。</p>";
}
?>
mb_language
やmb_internal_encoding
を設定することで、日本語メールの文字化けを回避しやすくなります。- $toには管理者が受け取るメールアドレスを指定します。
- $headersにFromやReply-Toをセットすると、受信側で返信がしやすくなります。
mb_send_mail()
関数は、PHPのマルチバイト文字対応版のメール送信関数です。サーバーの設定により、mail()関数でも動作する場合もありますが、できる限りmb_send_mail()
を使うことが推奨されます。
これで、フォームからのデータをメールとして送信できるシンプルな仕組みが完成です。
PHPメールフォームの設置方法と注意点
HTMLとPHPファイルを準備したら、実際にサーバーへアップロードし、正常に動作するかを確認します。以下の項目をチェックしながら進めましょう。
サーバーへのファイルアップロード
- FTPやファイルマネージャーを利用:レンタルサーバーの場合、FTPソフトやWeb上のファイルマネージャーを使って、index.htmlとsend.phpをサーバー上のディレクトリにアップロードします。
- 文字コード:ファイルの文字コードをUTF-8に統一しておくと、文字化けが起こりにくいです。
- 拡張子確認:HTMLは「.html」、PHPファイルは「.php」であることを再度チェックしてください。
PHPファイルの実行権限について
- 権限設定(パーミッション):サーバーによっては、PHPファイルに755などの実行権限が必要な場合があります。
- エラーメッセージ確認:権限が足りない場合、「Forbidden」や「Internal Server Error」が表示されることがあるので、適切に設定を行いましょう。
レンタルサーバーの管理画面やマニュアルを参照し、適切な権限を付与してください。
HTMLファイルとPHPファイルの配置場所
- 同じディレクトリ:今回のサンプルではindex.htmlとsend.phpを同じフォルダに配置し、index.htmlで
action="send.php"
を指定しています。 - パスの設定:もし別フォルダに設置する場合、
action="php/send.php"
のように正しいパスを指定しましょう。 - 公開ディレクトリ(public_html等):Webからアクセスできるように、サーバーの公開ディレクトリ内に配置してください。
動作確認の方法: 実際にフォームから送信してみる
- ブラウザでHTMLページにアクセス
https://yourdomain.com/index.html のようにURLを入力し、フォームを開きます。 - データを入力して「送信」
名前やメールアドレス、問い合わせ内容を入力し、送信。 - メール受信のチェック
管理者用アドレスにメールが届いていれば成功です。
エラーが出た場合の確認ポイント
- PHPエラーログ:サーバー側でエラーログを確認し、構文エラーや権限エラーを特定します。
- 文字化け:日本語が文字化けする場合は、mb_languageやmb_internal_encoding、HTMLの
meta charset="UTF-8"
を再確認。 - メールが届かない:迷惑メールフォルダに振り分けられていないか、$toや$headersの設定ミスがないかチェックしましょう。
PHPメールフォームのセキュリティ対策
- 入力バリデーション:必須項目やメールアドレスの形式、文字数制限などサーバーサイドで検証することが重要です。
- クロスサイトスクリプティング(XSS)対策:出力時にhtmlspecialchars()でエスケープするなどして不正なスクリプト埋め込みを防止。
- メールヘッダーインジェクション対策:ユーザーが送信するデータをメールヘッダーに含める際は、改行文字などの不正入力の除去、Content-Typeを悪用した攻撃の対策などを行いましょう。
- CAPTCHAやトークンの導入:スパムやボットによる大量投稿を防ぐため、reCAPTCHAなどの認証を導入するのも有効です。ユーザービリティを損なわないよう適切なバランスで導入しましょう。
PHPメールフォームのカスタマイズ
作成したメールフォームを、より使いやすくするためのカスタマイズの一例を紹介します。
- 確認画面の追加
送信前にユーザーが入力内容を確認できるページを挟むと、誤入力を防ぎやすくなります。 - 自動返信メール
ユーザーが入力したメールアドレスへ、受け付け完了のメッセージを自動送信する仕組みを追加できます。mail()関数を2回呼び出すか、PHPMailerなどのライブラリで柔軟に実装。 - 必須入力や選択肢の追加
ラジオボタンやチェックボックス、ドロップダウンメニューなどを利用し、問い合わせ種類を分類するなど、入力項目を増やすことで情報を整理しやすくなります。 - デザインの調整
CSSを使ってフォームの見栄えを整え、ユーザーが入力しやすいレイアウトにするのもポイント。
これらのカスタマイズを行うことで、運用しやすく、ユーザーにとっても利用しやすいフォームに仕上げられます。
まとめ
PHPメールフォームは、HTMLで作成した入力フォームとPHPのメール送信スクリプトを組み合わせることで実装できます。初心者の場合でも、変数の扱いや$_POST、mail()関数などの基本さえ押さえれば、簡単なフォームを作成することが可能です。サーバー環境の設定やセキュリティ対策をしっかり行い、エラーが出た際にはログを確認するなどの手順を踏めば、安定して運用できます。
なお、Tayoriなどのフォーム作成サービスを活用すれば、プログラミング不要で簡単に安全なお問い合わせフォームが作成できます。コストや工数を抑えたい場合はそちらも検討してみてください。