「ホームページ制作の仕事で、お問い合わせフォームを作ってください!」
もしこう言われたら、あなたはすぐに対応できますか?
お問い合わせフォームの実装は 必須のスキル です。
しかし、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を取得しましょう。
- GitHubの公式リポジトリにアクセス
→ PHPMailer公式GitHub - 「Code」ボタンをクリックし、「Download ZIP」を選択
- ダウンロードしたZIPファイルを解凍
PHPMailer-master
フォルダが作成される
- 必要なファイルをプロジェクトに配置
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を読み込んでメールを送信する基本的なコードを見てみましょう。
- PHPMailerを読み込む
- SMTPサーバーを設定する
- メールの送信先や本文を設定する
- メールを送信する
実際のコードは次のようになります。
<?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() failed | SMTPサーバーのホスト名・ポート・認証情報を確認する |
Could not authenticate | メールアドレスとパスワードが正しいか確認する |
Could not connect to SMTP host | メールサーバーがSMTP接続を許可しているか確認する |
require() failed | PHPMailer.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で実装する方法を見ていきましょう。
処理の流れ
- ユーザーに「お問い合わせ受付メール」を送信
- 管理者に「新規問い合わせ通知メール」を送信
実装方法
まず、フォームから送られたデータを受け取り、ユーザー用と管理者用のメールを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を設定することで、メールの到達率が向上する!
- セキュリティ対策を意識して、安全なフォームを運用しよう!
この記事で学んだことを活かして、実際のホームページ制作に活用 してみてください!