PHPでメール送信フォームを作る方法【サンプルコード付き】

php

PHPでメール送信フォームを作る方法

PHPでメール送信フォームを作る方法を紹介します。お名前・メールアドレス・お問い合わせ内容を入力し、メール送信できるシンプルなサンプルコードです。お問い合わせフォームや連絡フォームを自作したい場合や、PHPのメール送信機能を学びたい場合に活用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。なお、PHPのmail関数はサーバー環境や設定によって正常に送信できない場合があります。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

コードをコピーして使おう!

<?php

// 送信先メールアドレス
// ご自身の受信したいメールアドレスへ変更してください
$to = 'your-mail@example.com';

// エラーメッセージ
$errors = [];

// 送信完了メッセージ
$success = '';

// 入力値保持
$name = '';
$email = '';
$message = '';

// フォーム送信時
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // 入力値取得
    $name = trim($_POST['name'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $message = trim($_POST['message'] ?? '');

    // お名前チェック
    if ($name === '') {
        $errors[] = 'お名前を入力してください。';
    }

    // メールアドレスチェック
    if ($email === '') {
        $errors[] = 'メールアドレスを入力してください。';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'メールアドレスの形式が正しくありません。';
    }

    // お問い合わせ内容チェック
    if ($message === '') {
        $errors[] = 'お問い合わせ内容を入力してください。';
    }

    // エラーなし
    if (empty($errors)) {

        // メール件名
        $subject = 'お問い合わせがありました';

        // メール本文
        $body =
            "お名前:{$name}\n" .
            "メールアドレス:{$email}\n\n" .
            "お問い合わせ内容:\n{$message}\n";

        // メールヘッダー
        // サーバー環境によっては送信元メールアドレスの設定が必要になる場合があります
        $headers = "From: {$to}\r\n";
        $headers .= "Reply-To: {$email}\r\n";

        // メール送信
        if (mail($to, $subject, $body, $headers)) {

            $success = 'お問い合わせ内容を送信しました。';

            // フォーム初期化
            $name = '';
            $email = '';
            $message = '';

        } else {
            $errors[] = 'メール送信に失敗しました。';
        }

    }

}

?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メール送信フォーム</title>

<style>
.php-mail-form_wrap{
    margin:0;
    padding:30px;
    font-family:sans-serif;
    background:#fff;
}

.php-mail-form_box{
    border:1px solid #e5e7eb;
    border-radius:20px;
    padding:24px;
    background:#fff;
}

.php-mail-form_card{
    max-width:600px;
    margin:0 auto;
    padding:24px;
    border:1px solid #e5e7eb;
    border-radius:18px;
    background:#f8fafc;
}

.php-mail-form_title{
    font-size:22px;
    font-weight:700;
    margin-bottom:20px;
}

.php-mail-form_field{
    display:flex;
    flex-direction:column;
    gap:6px;
    margin-bottom:14px;
}

.php-mail-form_label{
    font-weight:700;
}

.php-mail-form_input,
.php-mail-form_textarea{
    width:100%;
    box-sizing:border-box;
    padding:12px;
    border:1px solid #d1d5db;
    border-radius:10px;
    font:inherit;
}

.php-mail-form_textarea{
    min-height:130px;
    resize:vertical;
}

.php-mail-form_error{
    color:#dc2626;
    font-size:13px;
    font-weight:700;
    margin-bottom:12px;
}

.php-mail-form_success{
    padding:14px;
    border-radius:12px;
    border:1px solid #bbf7d0;
    background:#f0fdf4;
    color:#15803d;
    font-weight:700;
    margin-bottom:14px;
}

.php-mail-form_btn{
    width:100%;
    height:46px;
    border:none;
    border-radius:10px;
    background:#0b6bff;
    color:#fff;
    font-weight:700;
    cursor:pointer;
}
</style>
</head>
<body>

<div class="php-mail-form_wrap">

    <div class="php-mail-form_box">

        <div class="php-mail-form_card">

            <div class="php-mail-form_title">
                メール送信フォーム
            </div>

            <?php if ($success !== ''): ?>
                <div class="php-mail-form_success">
                    <?= htmlspecialchars($success, ENT_QUOTES, 'UTF-8') ?>
                </div>
            <?php endif; ?>

            <?php foreach ($errors as $error): ?>
                <div class="php-mail-form_error">
                    <?= htmlspecialchars($error, ENT_QUOTES, 'UTF-8') ?>
                </div>
            <?php endforeach; ?>

            <form method="post">

                <div class="php-mail-form_field">
                    <label class="php-mail-form_label">お名前</label>
                    <input
                        class="php-mail-form_input"
                        type="text"
                        name="name"
                        value="<?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>">
                </div>

                <div class="php-mail-form_field">
                    <label class="php-mail-form_label">メールアドレス</label>
                    <input
                        class="php-mail-form_input"
                        type="email"
                        name="email"
                        value="<?= htmlspecialchars($email, ENT_QUOTES, 'UTF-8') ?>">
                </div>

                <div class="php-mail-form_field">
                    <label class="php-mail-form_label">お問い合わせ内容</label>
                    <textarea class="php-mail-form_textarea" name="message"><?= htmlspecialchars($message, ENT_QUOTES, 'UTF-8') ?></textarea>
                </div>

                <button class="php-mail-form_btn" type="submit">
                    送信する
                </button>

            </form>

        </div>

    </div>

</div>

</body>
</html>

ファイル構成と設置方法

このサンプルでは、PHPファイルを1つだけ使用します。PHPファイルをサーバーへアップロードすると、そのままメール送信フォームとして利用できます。

sample/
└─ index.php

上記のPHPファイルをサーバーへアップロードしてください。

送信先メールアドレスは、PHPコード内の下記を修正してください。

$to = ‘your-mail@example.com’;

上記を、ご自身が受信したいメールアドレスへ変更してご利用ください。

また、PHPのmail関数はサーバー環境や設定によって正常にメール送信できない場合があります。送信できない場合は、サーバー側のメール設定や利用環境をご確認ください。

PHPファイルをダブルクリックしても動作しません。動作確認はレンタルサーバーまたはPHPが利用できるローカル環境で行ってください。


コメント