PHPでメールフォームを実装する方法|確認画面・サンクスページ付き

PHPでメールフォームを作るには?

Webサイトでお問い合わせフォームや申し込みフォームを作成する際、PHPを使うことで簡単に実装できます。
しかし、適切な処理をしないと スパム送信や情報漏洩などのセキュリティリスク があります。

この記事では、以下の内容を解説します。

  • 基本的なメールフォームの作成
  • 入力内容の確認画面の実装
  • 送信完了後のサンクスページの作成
  • セキュリティリスクとその対策

PHP初心者の方でも理解しやすいように、コードとともに詳しく説明します。

メールフォームの基本構成

メールフォームは、以下の3つのファイルで構成されます。

  1. フォーム画面(index.php)
    ユーザーが入力するページ
  2. 確認画面(confirm.php)
    入力内容を表示し、送信するか確認するページ
  3. 送信処理(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 などのライブラリを利用することをおすすめします。

フォームを実装する際は、安全性を考慮しながら適切に構築しましょう!

よくある質問

フォームがスパム送信されるのを防ぐ方法は?

確認画面なしで直接メールを送ることは可能?

PHPだけでなくJavaScriptでもフォームのバリデーションをしたほうがいい?

Ad

独自ドメインを複数お持ちの方にお勧めのレンタルサーバー!