TransmitMail でパスワード保護付きのメールフォームを作る
カテゴリー: HTML/CSS/JS
PHP で動作する汎用メールフォーム TransmitMail で、WordPress の機能にあるようなパスワード保護(パスワードを知ってる人だけが本文を閲覧可能)を設定して、パスワードを入れないとフォームが表示されない仕組みを作ってみました。
JavaScript で実装することもできますが、ブラウザのソースを見たらフォーム部分がわかりますし、デベロッパーツールでソースを編集してフォームを表示することもできてしまいます。
一方、TransmitMail は PHP で動作しますので、PHP で実装することにしました。PHP を使えばブラウザのソースには現れません。
TransmitMail のテンプレートは HTML ファイルなので、これに直接 PHP を書くことはできません。これについては以前の記事「TransmitMail のテンプレートで PHP を使う」で書いてます。
この記事で編集した index.php を元に、ChatGPT と話しながら完成したのが以下です。
まず、パスワード認証用のページを lock.php として作成します。
<?php // パスワード認証ページ
session_start();
$password = "12345678"; // パスワード
if (isset($_POST['password'])) {
if ($_POST['password'] === $password) {
$_SESSION['tm_auth'] = true;
// 認証後にフォームへ
header("Location: index.php");
exit;
}
$error = "パスワードが違います。";
}
include 'header.php';
?>
<p><label for="password">パスワードを入力してください。</label></p>
<?php if(!empty($error)): ?>
<p style="color:#c00;"><?= $error ?></p>
<?php endif; ?>
<form method="post">
<input type="password" name="password" id="password">
<button type="submit">送信</button>
</form>
<?php
include 'footer.php';
?>
これを index.php の先頭に読み込んで認証済みかどうかをチェックし、認証してなければ lock.php へ飛ばします。
<?php
// パスワード保護
session_start();
if (empty($_SESSION['tm_auth'])) {
header("Location: lock.php");
exit;
}
include 'header.php';
require_once 'lib/TransmitMail.php';
$tm = new TransmitMail();
$tm->init('config/config.yml');
$tm->run();
include 'footer.php';
これで WordPress のパスワード保護と同様の仕組みが出来上がりました。