もうちょっと複雑な住所登録フォームメールの例です。
実際にはメールは送られませんので,安心してお試しください。
このファイル mail2.html は単なるHTML(XHTML)ファイルです。
上の「例」のところには次のように書き込んであります。
<form method="post" action="send.php"> <p>メール(必須):<input name="email" size="40" /></p> <p>住所 (必須):<input name="address" size="40" /></p> <p>氏名 (必須):<input name="name" size="40" /></p> <p>備考(オプション):<br /> <textarea name="memo" rows="4" cols="60"></textarea></p> <p> <input type="submit" value="送る" /> <input type="reset" value="クリア" /> </p> </form>
一方,form の action で指定している send.php は(だいたい)次のようになっています。
<?php
echo "<p>メール: ", htmlspecialchars($_POST['email']), "</p>\n";
echo "<p>住所: ", htmlspecialchars($_POST['address']), "</p>\n";
echo "<p>氏名: ", htmlspecialchars($_POST['name']), "</p>\n";
echo "<p>備考:</p>\n<pre>\n", htmlspecialchars($_POST['memo']), "\n</pre>\n";
$machigai = 0;
if ($_POST['email'] == '') {
echo "<p>メールアドレスがありません。</p>\n";
$machigai++;
}
if ($_POST['address'] == '') {
echo "<p>住所がありません。</p>\n";
$machigai++;
}
if ($_POST['name'] == '') {
echo "<p>氏名がありません。</p>\n";
$machigai++;
}
if ($machigai == 0) {
$fp = popen("/usr/bin/nkf -m0 | /usr/sbin/sendmail -oi -t", "w");
fwrite($fp, "From: {$_POST['email']}\r\n");
fwrite($fp, "To: だれだれ@どこどこ\r\n");
fwrite($fp, "Subject: " . mb_encode_mimeheader('住所登録', 'ISO-2022-JP') . "\r\n");
fwrite($fp, "Mime-Version: 1.0\r\n");
fwrite($fp, "Content-Type: text/plain; charset=ISO-2022-JP\r\n");
fwrite($fp, "Content-Transfer-Encoding: 7bit\r\n\r\n");
fwrite($fp, "メール: {$_POST['email']}\r\n\r\n");
fwrite($fp, "住所: {$_POST['address']}\r\n\r\n");
fwrite($fp, "氏名: {$_POST['name']}\r\n\r\n");
fwrite($fp, "備考:\r\n{$_POST['memo']}\r\n");
pclose($fp);
echo "<p>受け付けました。</p>\r\n";
} else {
echo "<p>$machigai 個のエラーがあります。</p>\n";
echo "<p>ブラウザの[戻る]ボタンを押して戻り,やりなおしてください。</p>\n";
}
?>
上の例は だれだれ@どこどこ
さんにメールを送るためのものです。
必ず送り先を自分の正しいメールアドレスに変えてください。
メールがエラーの場合に「だれだれ@どこどこ」に行くようにするには,sendmail
の引数に -f だれだれ@どこどこ を加えるか,あるいはヘッダに
Errors-To: だれだれ@どこどこ
を加えてください。
上の例では
echo "<p>備考:</p>\n<pre>\n", htmlspecialchars($_POST['memo']), "\n</pre>\n";
としていますが,改行を入れないで長い備考を書き込まれると横スクロールが発生してしまいます。これを避けるには
echo "<p>備考:<br />\n",
str_replace(array("\r\n", "\n", "\r"), '<br />',
htmlspecialchars($_POST['memo'])),
"</p>\n";
のように改行を <br />
で置き換えるだけにするほうがよさそうです。
Last modified: 2009-08-05 21:55:59