ホームページ制作でメールフォームを自作する方法【初心者向け】

「ホームページ制作の仕事で、お問い合わせフォームを作ってください!」

もしこう言われたら、あなたはすぐに対応できますか?

お問い合わせフォームの実装は 必須のスキル です。
しかし、PHPの mail() 関数を使うだけでは、メールが届かない・迷惑メールに入る・サーバーによっては無効 などの問題が発生します。

そこで、本記事では PHPMailer を使って、 確実にメールを送れるフォームを作る方法 を解説します!

この記事でわかること

  • メールフォームの基本構造
  • PHPMailerを GitHubからダウンロード して使う方法
  • SMTP設定 でメールを確実に送る手順
  • メール送信時のエラー対策

💡 実務レベルのスキルを身につけて、どんな案件にも対応できるコーダーを目指しましょう!


目次

メールフォームの仕組みを理解しよう

メールフォームってどう動いてるの?

まずは、メールフォームがどのように動作するのかを シンプルに解説 します。

お問い合わせフォームは 以下の3つの要素 で構成されます。

1️⃣ フロントエンド(HTML)

  • ユーザーが名前やメールアドレスを入力するフォーム部分

2️⃣ バックエンド(PHP + PHPMailer)

  • ユーザーが入力したデータを受け取り、メールを送信する処理

3️⃣ メールサーバー(SMTP)

  • 送信されたメールを相手に届ける(Gmailや独自ドメインのメールサーバー)

メール送信の流れを図解(イメージ)

💡 フォームの流れはこんな感じ!

1️⃣ ユーザーがフォームに入力し、「送信」ボタンを押す
2️⃣ 入力データが PHPのPOSTリクエスト として送信される
3️⃣ PHPMailerがデータを受け取り、メールを作成
4️⃣ SMTPサーバーを通じてメールを送信
5️⃣ ユーザーと管理者に それぞれメールが届く

これが 基本の仕組み です!


PHPでメールを送信するには?

メールを送信するには、2つの方法があります。

❌ PHPの mail() 関数(非推奨)

mail() 関数を使うと、簡単にメールを送ることができますが…

🚨 問題点:

  • サーバーによっては無効化されている
  • 迷惑メールフォルダに入りやすい
  • SMTP認証なしなのでセキュリティリスクがある

👉 mail() は、実務ではほぼ使われない!


✅ PHPMailer(おすすめ!)

PHPMailerは、メール送信を より安全かつ確実に行うためのライブラリ です。

🎯 PHPMailerを使うメリット
✔ SMTP認証が可能 → メールの信頼性が向上!
✔ 迷惑メールに入りにくい → 確実に相手に届く!
✔ HTMLメールや添付ファイルもOK → 実務レベルのメールが送れる!


💡 結論:メールフォームを作るなら、PHPMailer一択!

では、PHPMailerをGitHubからダウンロードして使う方法 を見ていきましょう!


PHPMailerをGitHubからダウンロードして使う方法

PHPMailerのダウンロード手順

PHPMailerは、PHPでメールを送信するためのライブラリです。
mail() 関数と違い、SMTPを利用することで確実にメールを届けることができます。

Composerが使えない環境でも、GitHubから直接ダウンロードして利用できます。
以下の手順でPHPMailerを取得しましょう。

  1. GitHubの公式リポジトリにアクセス
    PHPMailer公式GitHub
  2. 「Code」ボタンをクリックし、「Download ZIP」を選択
  3. ダウンロードしたZIPファイルを解凍
    • PHPMailer-master フォルダが作成される
  4. 必要なファイルをプロジェクトに配置

PHPMailerのファイルが準備できたら、次のステップへ進みます。


必要なファイルをプロジェクトに配置する

ダウンロードしたフォルダには、さまざまなファイルが含まれていますが、実際に必要なのは以下の3つだけです。

PHPMailer.php(PHPMailer本体)
Exception.php(エラーハンドリング用)
SMTP.php(SMTP接続を行うためのファイル)

不要なファイル(README.md や examples フォルダなど)は削除しても問題ありません。

プロジェクトに適切に配置することで、PHPMailerをスムーズに利用できるようになります。


設置するフォルダ構成を解説

PHPMailerを配置する際の推奨フォルダ構成は次のようになります。

/your-project-folder/
│-- /PHPMailer/      ← PHPMailer関連のファイル
│   ├── PHPMailer.php
│   ├── Exception.php
│   ├── SMTP.php
│-- send_mail.php  ← メール送信処理を行うPHPファイル
│-- form.html      ← お問い合わせフォーム

💡 ポイント

  • PHPMailer.php などのファイルは PHPMailer フォルダ内にまとめると管理しやすいです。
  • send_mail.php は、フォームから送信されたデータを処理し、メールを送信する役割を持ちます。
  • form.html は、お問い合わせフォームのフロントエンド部分を担当します。

このフォルダ構成にすることで、コードの管理がしやすくなり、トラブルが発生したときにも対応しやすくなります。


ここまでで、PHPMailerをダウンロードし、プロジェクトに適切に配置する方法を解説しました。
次のステップでは、「PHPMailerを使ってメールを送信する」 方法について詳しく解説していきます。

了解しました!それでは、「PHPMailerを使ってメールを送信する」 の内容を作成していきます。


PHPMailerを使ってメールを送信する

PHPMailerの準備が整ったら、実際にメールを送信できるように設定していきます。
ここでは、基本的なPHPコードの記述方法SMTPの設定方法 について解説します。


基本的なPHPコードの記述

まず、PHPMailerを読み込んでメールを送信する基本的なコードを見てみましょう。

  1. PHPMailerを読み込む
  2. SMTPサーバーを設定する
  3. メールの送信先や本文を設定する
  4. メールを送信する

実際のコードは次のようになります。

<?php
// 必要なファイルを読み込む
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/Exception.php';
require 'PHPMailer/SMTP.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// PHPMailerのインスタンスを作成
$mail = new PHPMailer(true);

try {
    // SMTPの設定
    $mail->isSMTP();
    $mail->Host       = 'smtp.example.com'; // SMTPサーバー
    $mail->SMTPAuth   = true;
    $mail->Username   = 'your@example.com'; // SMTPユーザー名
    $mail->Password   = 'yourpassword'; // SMTPパスワード
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587; // TLSの場合は587, SSLの場合は465

    // 送信元と送信先
    $mail->setFrom('your@example.com', '送信者名');
    $mail->addAddress('recipient@example.com', '受信者名');

    // メールの内容
    $mail->Subject = 'テストメール';
    $mail->Body    = 'このメールはPHPMailerを使用して送信されました。';

    // メールを送信
    $mail->send();
    echo 'メールが送信されました。';
} catch (Exception $e) {
    echo "メール送信に失敗しました: {$mail->ErrorInfo}";
}
?>

このコードを send_mail.php に記述し、適切に設定することで、SMTPサーバーを経由してメールを送信 できます。


SMTPを設定してメールを確実に送信する

SMTPサーバーを正しく設定しないと、メールが送信できなかったり、迷惑メールに分類されてしまったりすることがあります。
ここでは、SMTPの設定を確認しながら、安全にメールを送信する方法を解説します。

SMTP設定のポイント

  • SMTPサーバー情報を確認する
    → 例えば、Gmailを使う場合は smtp.gmail.com を設定する。
  • SMTP認証を有効にする
    → メール送信には ユーザー名(メールアドレス)パスワード が必要。
  • 暗号化方式を選択する
    TLS(ポート587)または SSL(ポート465)を選択する。

GmailのSMTPを使用する場合の設定例

Gmailを送信サーバーとして利用する場合は、次のように設定します。

$mail->Host       = 'smtp.gmail.com';
$mail->SMTPAuth   = true;
$mail->Username   = 'your@gmail.com';
$mail->Password   = 'your-app-password'; // アプリパスワードを使用
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port       = 587;

💡 ポイント
GmailのSMTPを使う場合、Googleアカウントの「アプリパスワード」を発行して使用する必要があります。


エラー対策:よくある失敗と解決策

PHPMailerを使用するときに発生しやすいエラーと、その対処法をまとめました。

エラー内容解決策
SMTP connect() failedSMTPサーバーのホスト名・ポート・認証情報を確認する
Could not authenticateメールアドレスとパスワードが正しいか確認する
Could not connect to SMTP hostメールサーバーがSMTP接続を許可しているか確認する
require() failedPHPMailer.php などのファイルのパスが正しいか確認する

エラーが発生した場合は、エラーメッセージを確認し、設定を見直すことが重要です。


ここまでで、PHPMailerを使って基本的なメール送信を実装する方法を解説しました。
次は、お問い合わせフォームを作成し、フォームから送信できるようにする方法 を解説します。

了解しました!それでは、「PHPMailerを使ってメールを送信する」 の内容を作成していきます。


メールフォームを作成し、フォームから送信する

PHPMailerを使ってメールを送信する準備が整ったら、次は実際にお問い合わせフォームを作成し、フォームの内容を送信できるようにする処理を実装していきます。


HTMLでお問い合わせフォームを作る

まず、HTMLでシンプルなお問い合わせフォームを作成します。

必要なフォームの項目

一般的なお問い合わせフォームには、次のような項目を用意します。

  • 名前(必須)
  • メールアドレス(必須)
  • お問い合わせ内容(必須)

form.html に、以下のようなフォームを作成します。

<form action="send_mail.php" method="POST">
    <label>名前:</label>
    <input type="text" name="name" required>
    
    <label>メールアドレス:</label>
    <input type="email" name="email" required>
    
    <label>お問い合わせ内容:</label>
    <textarea name="message" required></textarea>
    
    <button type="submit">送信</button>
</form>

💡 ポイント

  • method="POST" にすることで、フォームのデータを send_mail.php に送信できる。
  • required を付けることで、未入力の場合は送信できないようにする。

フォームデータをPHPMailerで処理する

次に、フォームから送信されたデータを受け取り、PHPMailerを使ってメールを送信 します。
処理は send_mail.php に記述します。

フォームデータを受け取る

PHPで $_POST を使ってデータを取得します。

$name = htmlspecialchars($_POST["name"], ENT_QUOTES);
$email = htmlspecialchars($_POST["email"], ENT_QUOTES);
$message = htmlspecialchars($_POST["message"], ENT_QUOTES);

htmlspecialchars() を使うことで、XSS(クロスサイトスクリプティング)対策を行います。

PHPMailerを使ってメールを送信

フォームのデータを受け取り、PHPMailerを使って送信します。

require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/Exception.php';
require 'PHPMailer/SMTP.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    // SMTP設定
    $mail->isSMTP();
    $mail->Host = 'smtp.example.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'your@example.com';
    $mail->Password = 'yourpassword';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port = 587;

    // 送信元・送信先
    $mail->setFrom('your@example.com', 'お問い合わせ受付');
    $mail->addAddress($email, $name);

    // メール内容
    $mail->Subject = 'お問い合わせありがとうございます';
    $mail->Body = "{$name} 様\n\nお問い合わせありがとうございます。\n\n---\n$message\n---\n\n担当者よりご連絡いたします。";

    $mail->send();
    echo "メールが送信されました。";
} catch (Exception $e) {
    echo "メール送信に失敗しました: {$mail->ErrorInfo}";
}

💡 ポイント

  • $_POST で取得したフォームデータを setFrom()addAddress() に設定する。
  • Body に問い合わせ内容を挿入することで、ユーザーに送信内容を確認してもらえるようにする。

送信後の確認メッセージを設定する

フォーム送信後に、適切なメッセージを表示することで、ユーザーに「正常に送信された」ことを知らせます。

送信完了メッセージを表示する

成功時と失敗時で、メッセージの表示を変えることができます。

if ($mail->send()) {
    echo "<p>お問い合わせありがとうございます。メールを送信しました。</p>";
} else {
    echo "<p>申し訳ありませんが、メールの送信に失敗しました。</p>";
}

また、送信後に「サンクスページ」 へリダイレクトさせるのも良い方法です。

header("Location: thank_you.html");
exit;

thank_you.html には、「お問い合わせを受け付けました」というメッセージを書いておきます。


ここまでで、HTMLフォームの作成 → フォームデータを取得 → メール送信の処理 まで実装できました。
次は、「PHPMailerを使った応用テクニック」 を解説していきます!

了解です!次は 「メールフォームを作成し、フォームから送信する」 の解説を進めます。


PHPMailerを使った応用テクニック

基本的なメール送信の実装ができたら、次は 「応用テクニック」 を学んで、より実用的なメールフォームにしていきましょう。
ここでは、管理者とユーザーに異なるメールを送る方法・HTMLメールを送信する方法・添付ファイル付きメールの送信 について解説します。


管理者とユーザーに異なるメールを送る

通常、お問い合わせフォームでは
ユーザーに「受付完了メール」 を送信し、
管理者に「問い合わせ通知メール」 を送信する必要があります。

これをPHPMailerで実装する方法を見ていきましょう。

処理の流れ

  1. ユーザーに「お問い合わせ受付メール」を送信
  2. 管理者に「新規問い合わせ通知メール」を送信

実装方法

まず、フォームから送られたデータを受け取り、ユーザー用と管理者用のメールを2回送信 するようにします。

require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/Exception.php';
require 'PHPMailer/SMTP.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// フォームデータを取得
$name = htmlspecialchars($_POST["name"], ENT_QUOTES);
$email = htmlspecialchars($_POST["email"], ENT_QUOTES);
$message = htmlspecialchars($_POST["message"], ENT_QUOTES);

// SMTP設定
$smtp_host = 'smtp.example.com';
$smtp_user = 'your@example.com';
$smtp_pass = 'yourpassword';
$smtp_port = 587;

try {
    // ユーザー向けメール
    $mailUser = new PHPMailer(true);
    $mailUser->isSMTP();
    $mailUser->Host = $smtp_host;
    $mailUser->SMTPAuth = true;
    $mailUser->Username = $smtp_user;
    $mailUser->Password = $smtp_pass;
    $mailUser->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mailUser->Port = $smtp_port;

    $mailUser->setFrom($smtp_user, 'お問い合わせサポート');
    $mailUser->addAddress($email, $name);
    $mailUser->Subject = 'お問い合わせありがとうございます';
    $mailUser->Body = "{$name} 様\n\nお問い合わせありがとうございます。\n\n---\n{$message}\n---\n\n担当者よりご連絡いたします。";

    $mailUser->send();

    // 管理者向けメール
    $mailAdmin = new PHPMailer(true);
    $mailAdmin->isSMTP();
    $mailAdmin->Host = $smtp_host;
    $mailAdmin->SMTPAuth = true;
    $mailAdmin->Username = $smtp_user;
    $mailAdmin->Password = $smtp_pass;
    $mailAdmin->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mailAdmin->Port = $smtp_port;

    $mailAdmin->setFrom($smtp_user, 'お問い合わせ通知');
    $mailAdmin->addAddress('admin@example.com', '管理者');
    $mailAdmin->Subject = '新しいお問い合わせ';
    $mailAdmin->Body = "名前: {$name}\nメール: {$email}\n\n---\n{$message}\n---";

    $mailAdmin->send();

    echo "メール送信完了";
} catch (Exception $e) {
    echo "メール送信失敗: {$mailUser->ErrorInfo}";
}

ポイント

  • ユーザー向けメールと管理者向けメールをそれぞれ送信する
  • 異なるメールアドレスを addAddress() に指定することで、送信先を切り替える
  • SMTPの設定は共通で使いまわせるので、適宜関数化してもOK

HTMLメールを送信する方法

通常のテキストメールだけでなく、HTMLメール を送信することも可能です。
HTMLメールを使うことで、レイアウトを整えた美しいメール を送ることができます。

HTMLメールの設定

PHPMailerでは isHTML(true) を設定することで、HTMLメールを送信できます。

$mail->isHTML(true);
$mail->Subject = 'お問い合わせありがとうございます';
$mail->Body    = "<h2>{$name} 様</h2><p>お問い合わせありがとうございます。</p><hr><p>{$message}</p>";

💡 ポイント

  • isHTML(true) を設定しないと、HTMLタグがそのまま表示されてしまうので注意!
  • Body にHTML形式のメール本文を記述すれば、装飾されたメールを送信できる。

添付ファイル付きのメールを送る

PHPMailerでは、ファイルを添付 することもできます。
例えば、フォームで「ファイルアップロード」を受け付け、それをメールに添付する場合は次のように実装します。

フォームにファイルアップロードを追加

<form action="send_mail.php" method="POST" enctype="multipart/form-data">
    <label>名前:</label>
    <input type="text" name="name" required>

    <label>メールアドレス:</label>
    <input type="email" name="email" required>

    <label>お問い合わせ内容:</label>
    <textarea name="message" required></textarea>

    <label>添付ファイル:</label>
    <input type="file" name="attachment">

    <button type="submit">送信</button>
</form>

PHPMailerでファイルを添付する

if (isset($_FILES["attachment"]) && $_FILES["attachment"]["error"] == 0) {
    $mail->addAttachment($_FILES["attachment"]["tmp_name"], $_FILES["attachment"]["name"]);
}

💡 ポイント

  • addAttachment() でファイルを添付できる。
  • $_FILES["attachment"]["tmp_name"] で、アップロードされたファイルのパスを取得する。
  • $_FILES["attachment"]["name"] で、元のファイル名を取得し、添付ファイルの名前として指定できる。

まとめ:PHPMailerを使って実践的なメール送信をしよう

ここまで、ホームページ制作におけるメールフォームの自作方法について解説してきました。
この記事で紹介した内容を実装すれば、PHPを使って確実にメールを送信できるフォーム を作成できます。


PHPMailerを活用すれば簡単にメールフォームが作れる

メールフォームを作るとき、mail() 関数を使う方法もありますが、
迷惑メールに分類されやすい・サーバーによっては無効化されている などの問題があります。

そのため、PHPMailer + SMTP を利用することで、以下のようなメリットが得られます。

SMTP認証により、確実にメールを送信できる
HTMLメールや添付ファイルにも対応できる
ユーザーと管理者に異なるメールを送ることができる


より安全にメールを送るための注意点

メールフォームを運用する際は、セキュリティ対策 も考慮する必要があります。
以下のポイントを意識することで、安全に運用できます。

1. 入力データのバリデーションを行う

  • 名前・メールアドレス・メッセージの入力チェック を行う
  • 不正なデータが送信されないように、htmlspecialchars()filter_var() を使う

2. SMTPの認証情報を外部ファイルで管理する

SMTPのユーザー名やパスワードをコード内に直接記述すると、
セキュリティリスクが高まります。
.env ファイルや config.php などの別ファイルに保存する方法 を推奨します。

3. reCAPTCHAを導入する

スパム対策として、Googleの reCAPTCHA を導入するのも有効です。
フォームに追加することで、不正な自動送信を防ぐことができます。


次のステップ:さらに高度なカスタマイズに挑戦

基本的なメールフォームを作れるようになったら、次のような応用にも挑戦してみましょう。

自動返信メールのカスタマイズ(HTMLメールをもっとデザインする)
データベースと連携し、送信履歴を保存する
お問い合わせフォームをWordPressに組み込む

これらを実装することで、さらに実務で使えるメールフォーム を作れるようになります!


まとめ

  • PHPMailerを使えば、確実にメールを送信できるフォームが作れる!
  • SMTPを設定することで、メールの到達率が向上する!
  • セキュリティ対策を意識して、安全なフォームを運用しよう!

この記事で学んだことを活かして、実際のホームページ制作に活用 してみてください!


よかったらシェアしてね!
  • URLをコピーしました!
目次