PHPでメールフォームを作るには?
Webサイトでお問い合わせフォームや申し込みフォームを作成する際、PHPを使うことで簡単に実装できます。
しかし、適切な処理をしないと スパム送信や情報漏洩などのセキュリティリスク があります。
この記事では、以下の内容を解説します。
- 基本的なメールフォームの作成
- 入力内容の確認画面の実装
- 送信完了後のサンクスページの作成
- セキュリティリスクとその対策
PHP初心者の方でも理解しやすいように、コードとともに詳しく説明します。
メールフォームの基本構成
メールフォームは、以下の3つのファイルで構成されます。
- フォーム画面(index.php)
ユーザーが入力するページ - 確認画面(confirm.php)
入力内容を表示し、送信するか確認するページ - 送信処理(complete.php)
メールを送信し、サンクスページに遷移する
ファイル構成は以下のような形になります。
あらかじめプロジェクトフォルダに作成しておくと良いでしょう。

1. フォーム画面(index.php)
まず、フォームのHTMLを作成します。
<?php
session_start();
// 修正ボタンから戻ってきた場合、セッションデータを `$_POST` にセット
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_SESSION['form_data'])) {
$_POST = $_SESSION['form_data'];
}
// フォームの入力値をセッションから取得
$name = isset($_POST['name']) ? $_POST['name'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$message = isset($_POST['message']) ? $_POST['message'] : '';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
</head>
<body>
<form action="confirm.php" method="post">
<label>お名前:</label>
<input type="text" name="name" value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>" required><br>
<label>メールアドレス:</label>
<input type="email" name="email" value="<?php echo htmlspecialchars($email, ENT_QUOTES, 'UTF-8'); ?>" required><br>
<label>お問い合わせ内容:</label>
<textarea name="message" required><?php echo htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); ?></textarea><br>
<button type="submit">確認画面へ</button>
</form>
</body>
</html>
2. 入力確認画面(confirm.php)
送信ボタンを押す前に、入力した内容を確認する画面を作ります。$_POST
でフォームのデータを受け取り、確認用のHTMLに表示します。
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: index.php');
exit;
}
// フォームデータをセッションに保存
$_SESSION['form_data'] = $_POST;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>確認画面</title>
</head>
<body>
<h2>入力内容の確認</h2>
<p>お名前:<?php echo htmlspecialchars($_SESSION['form_data']['name'], ENT_QUOTES, 'UTF-8'); ?></p>
<p>メールアドレス:<?php echo htmlspecialchars($_SESSION['form_data']['email'], ENT_QUOTES, 'UTF-8'); ?></p>
<p>お問い合わせ内容:<?php echo nl2br(htmlspecialchars($_SESSION['form_data']['message'], ENT_QUOTES, 'UTF-8')); ?></p>
<form action="send.php" method="post">
<button type="submit">送信する</button>
</form>
<form action="index.php" method="post">
<button type="submit">修正する</button>
</form>
</body>
</html>
3. メール送信処理(send.php)
入力されたデータをメールで送信し、送信完了ページへリダイレクトします。
<?php
session_start();
if (!isset($_SESSION['form_data'])) {
header('Location: index.php');
exit;
}
$form_data = $_SESSION['form_data'];
// メール送信処理
$to = "admin@example.com"; // 送信先
$subject = "お問い合わせがありました";
$headers = "From: " . $form_data['email'];
$message = "お名前: " . $form_data['name'] . "\n";
$message .= "メールアドレス: " . $form_data['email'] . "\n\n";
$message .= "お問い合わせ内容:\n" . $form_data['message'] . "\n";
mail($to, $subject, $message, $headers);
// セッションを破棄
unset($_SESSION['form_data']);
session_destroy();
header('Location: complete.php');
exit;
?>
4. サンクスページ(complete.php)
送信完了後に表示するページを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>送信完了</title>
</head>
<body>
<h2>お問い合わせありがとうございます</h2>
<p>送信が完了しました。</p>
<a href="index.php">戻る</a>
</body>
</html>
まとめ
PHPで基本的なメールフォームを実装する方法を紹介しました。
ただし、mail()
関数はセキュリティリスクがあるため、できるだけ PHPMailer
などのライブラリを利用することをおすすめします。
フォームを実装する際は、安全性を考慮しながら適切に構築しましょう!