メールフォームを作りたいがどうすればいいと言われて、PHPで書いてみた。
という話がありました。
最近、Perlでいろいろやってるから、Perl-CGIでやると思ったらしいが、動的なWebページ作りにはPHPがいいですね。
mail関数を使えば簡単に作れる。
$name=$_POST['name'];$email=$_POST['email'];$message=$_POST['message'];
if($name && $email && $message){
$sub = mb_convert_encoding("メッセージを受け取りました","ISO-2022-JP");
$sub = "=?iso-2022-jp?B?".base64_encode($sub)."?=";
$mes = <<$message
-------------------
名前 $name
メールアドレス $email
EOF;
$mes = mb_convert_encoding($mes,"ISO-2022-JP","UTF-8");
$head = <<From: Mailform
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
EOF;
if (mail("webmaster@example.com", $sub, $mes, $head) ){
echo "<p>成功しました!!</p>";
}else{
echo "<p>失敗しました!!</p>";
}
}else{
?>
}
?>
フォームがUTF-8だから、ひたすらUTF-8を使うのも一興だと思うのだけど、一応ポピュラーなISO-2022-JPに変換しています。
ISO-2022-JPはISO-2022-JP以外の言い方は多分ない。
このあたり注意しないと痛い。
なぜかJISコードと通称されるけど、実際はISO-2022-JPのみならずEUC-JP、Shift_JISもJIS X0208で定められてる。
さらに言えば、UnicodeもどきのUCSもJIS X0221で定められてるけど、これをJISコードと言う人は聞かない。
いちいち長いけど、ISO-2022-JPと言うのがいいでしょう。
非常に簡単なもので、POSTで3つの内容が送られてきたら、当てはめてメールを送信して、
そうでなければ<!–メールフォーム本体 –>の位置にあるメールフォームを表示すると。
ここでヘッダーを自分で定めています。これを定めないと問題があるのできちんと書いて、mail関数に渡しておきましょう。
これだと迷惑メール送り放題なので工夫が必要ですが、基本的にはこれでOKです。
迷惑メール対策とはいっても、正直まともな方法はないけどね。
まぁ1つ考えられるのは画像認証だな。
GDを入れてるので、画像描画はできるはずだから、試してみるのもありかな。
あと、送り主の身元を保証するために、確認メールのURLを確認してから送るとか。
4時間以内にクリックしなさいと。それで送られなかったらゴミが残るけど、crondで定期的に消せばいいでしょう。
欠点はメールアドレスのない人は決して送れないというのはあるがな。
まぁいろいろアイデアはあるだろうけど、いたずらするやつの気を悪くさせる程度の効果しかないわな。
このメールフォームをどう使うかは知らないけど、簡単な工夫はした方がいいだろうね。