PHPでメール送信

WordPressのプラグインを使わず、

お問い合わせフォームを作成!!

[初めてメールを実装]

[初めてメールを実装]

PHPでお問い合わせフォームを実装する。
メールを送信するのに、PHPmailerを使いセキュリティ対策をし、gmailのパスワードを入力してgmailのメールサーバーで送信を可能にする。
[mail.phpにて]
※下記は抜粋したコード


<main class="main2">
<div class="background">
<div class="contact-form-container">
<h1 class="title"><span class="h1">お問い合わせ</span></h1>
<form id="contact-form" class="form" method="post" action="./cofirm.php">
<label for="name">ニックネーム*</label>
<input type="text" id="name" name="name" required autofocus placeholder="トララ" />
<label for="email">メールアドレス*</label>
<input type="email" id="email" name="email" required placeholder="sample@gmail.com" />
<label for="message">メッセージ*</label>
<textarea
id="message"
name="message"
rows="5"
required></textarea>
<div class="form_button">
<button type="reset" class="button2">リセット</button>
<button type="submit" class="button2">送信</button>
</div>
</form>
<!-- .form -->
</div>
</div>
</main>

[確認画面を実装]

[確認画面を実装]

[cofirm.phpにて]
※下記のコードは確認画面を表示する抜粋したコード


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// サニタイズ処理
$name = htmlspecialchars(trim($_POST["name"]), ENT_QUOTES, 'UTF-8');
$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
$message = htmlspecialchars(trim($_POST["message"]), ENT_QUOTES, 'UTF-8');
// メールアドレスのバリデーション
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die('無効なメールアドレスです');
}
} else {
// POSTリクエストでない場合はフォームページへリダイレクト
header("Location: ./mail.php");
exit();
}
?>
<div class="main2">
<div class="card">
<h1>お問い合わせ確認画面</h1>
<p>以下の内容で送信します。よろしいですか?</p>
<div class="meiltext">
<table>
<tr>
<label><th>名前:</th><td><?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?></td></label>
</tr>
<tr>
<label><th>メールアドレス:</th><td><?= htmlspecialchars($email, ENT_QUOTES, 'UTF-8'); ?></td></label>
</tr>
<tr>
<label><th>メッセージ:</th><td><?= nl2br(htmlspecialchars($message, ENT_QUOTES, 'UTF-8')); ?></td></label>
</tr>
</table>
</div>
<form method="post" action="send.php">
<input type="hidden" name="name" value="<?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>">
<input type="hidden" name="email" value="<?= htmlspecialchars($email, ENT_QUOTES, 'UTF-8'); ?>">
<input type="hidden" name="message" value="<?= htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); ?>">
<div class="form_button">
<input type="submit" value="送信" class="button2">
<button> type="button" onclick="history.back()" class="button2">戻る</button>
</div>
</form>
<div class="ribbon">
<p>Thank You</p>
</div>
</div>
</div>
</div>

[送信完了]

[送信完了]

[send.phpにて]
※下記のコードは送信完了画面を表示する抜粋したコード


<?php
require './vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');
$message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
$mail = new PHPMailer(true);
  try {
// サーバ設定
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com'; // GmailのSMTPサーバー
$mail->SMTPAuth = true;
$mail->Username = 'torara.portfolio@gmail.com'; // Gmailアカウント
$mail->Password = '※入力'; // Gmailアカウントのアプリパスワード
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
// 受信者
$mail->setFrom('torara.portfolio@gmail.com', 'トララ');
$mail->addAddress($email, $name); // フォームの送信者にも送信
// コンテンツ
$mail->isHTML(true);
$mail->CharSet = 'UTF-8'; // 文字エンコーディングをUTF-8に設定
$mail->Subject = 'お問い合わせありがとうございます';
$mail->Body = "お名前: $name<br>メールアドレス: $email<br>メッセージ:<br>$message";
$mail->AltBody = "お名前: $name\nメールアドレス: $email\nメッセージ:\n$message";
$mail->send();
$responseMessage = 'メッセージが送信されました。';
} catch (Exception $e) {
$responseMessage = "メッセージの送信に失敗しました。 メーラーエラー: {$mail->ErrorInfo}";
}
} else {
$responseMessage = '無効なリクエストです。';
}
?>
<div class="text">
<h1>お問い合わせ送信完了画面</h1>
<p><?= htmlspecialchars($responseMessage, ENT_QUOTES, 'UTF-8'); ?></p>
<p><a href="./mail.php">お問い合わせに戻る</a></p>
</div>