簡単フォームメール

 HTML埋め込み型の簡単なフォームメールスクリプトを作って見ました。メールの送信処理はPerlに比べてとっても簡単!ただ、文字化けには注意しないとね(^^ゞ

<HTML>
<HEAD>
<TITLE>簡単フォームメール</TITLE>
</HEAD>
<BODY BGCOLOR="#FFCCCC">
<FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST">
<P><INPUT TYPE="HIDDEN" NAME="action" VALUE="post"></P>
<P ALIGN="CENTER"><FONT SIZE="6" COLOR="#0033CC" FACE="HGS創英角ポップ体">簡単フォームメール</FONT></P>
<CENTER>
<P>
<TABLE BORDER="0" CELLSPACING="1" WIDTH="79%">
<TR>
<TD WIDTH="21%">
<P ALIGN="RIGHT"><B>お名前:</B>
</TD>
<TD WIDTH="79%"><INPUT TYPE="TEXT" NAME="name" SIZE="17"> <FONT SIZE="2" COLOR="red">*必須!</FONT></TD>
</TR>
<TR>
<TD WIDTH="21%">
<P ALIGN="RIGHT"><B>E-mail:</B>
</TD>
<TD WIDTH="79%"><INPUT TYPE="TEXT" NAME="email" SIZE="26"> <FONT SIZE="2" COLOR="red">*必須!</FONT></TD>
</TR>
<TR>
<TD WIDTH="21%">
<P ALIGN="RIGHT"><B>HomePage:</B>
</TD>
<TD WIDTH="79%"><INPUT TYPE="TEXT" NAME="hp" SIZE="45"></TD>
</TR>
<TR>
<TD WIDTH="21%">
<P ALIGN="RIGHT"><B>住んでる地域:</B>
</TD>
<TD WIDTH="79%">
<SELECT NAME="area">
<OPTION SELECTED>選んでね(^。^)</OPTION>
<OPTION>北海道</OPTION>
<OPTION>東北</OPTION>
<OPTION>北陸</OPTION>
<OPTION>関東</OPTION>
<OPTION>中部</OPTION>
<OPTION>近畿</OPTION>
<OPTION>中国</OPTION>
<OPTION>四国</OPTION>
<OPTION>九州</OPTION>
<OPTION>沖縄</OPTION>
</SELECT>
</TD>
</TR>
<TR>
<TD WIDTH="21%">
<P ALIGN="RIGHT"><B>お電話:</B>
</TD>
<TD WIDTH="79%"><INPUT TYPE="TEXT" NAME="tel" SIZE="15"> <FONT SIZE="2" COLOR="red">*差し支えなければ教えてね!</FONT></TD>
</TR>
<TR>
<TD WIDTH="21%">
<P ALIGN="RIGHT"><B>ご意見:</B>
</TD>
<TD WIDTH="79%"><TEXTAREA NAME="comment" ROWS="4" COLS="43"></TEXTAREA></TD>
</TR>
<TR>
<TD WIDTH="21%">&nbsp;</TD>
<TD WIDTH="79%"><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="メッセージを送る/更新"> <INPUT TYPE="RESET" NAME="Reset" VALUE="リセット"></TD>
</TR>
<TR>
<TD COLSPAN="2">
データ入力画面です。最初にホームページ作成ソフトで作っておいて下さい。
<?php PHP開始の合図。
//=====================初期設定======================
$to = "komochan@komonet.ne.jp"; //メールの送信先です。
$subject = "「PHPの小部屋」サンプルスクリプトより"; //件名です。
初期設定です。
//===================確認画面生成関数=================
function Kakunin(){
 global $to,$name,$email,$hp,$area,$tel,$comment,$PHP_SELF;
 if(($name != "") && ($email != "")){
  //ここから書き込みデータの調整
  $name = htmlspecialchars($name); //特殊文字のHTMLエントリへの変換
  $email = htmlspecialchars($email);
  $hp = htmlspecialchars($hp);
  $comment = htmlspecialchars($comment);
  $comment = nl2br($comment); //HTML改行文字の挿入
  $comment = str_replace("\r", "", $comment); //文字列の置換
  $comment = str_replace("\n", "", $comment);
  //確認ページを生成
  print "◆メッセージ確認(送信先: $to )\n";
  print "<CENTER>\n";
  print "<TABLE BORDER=1 CELLSPACING=0 WIDTH=80%>\n";
  print "<FORM ACTION=$PHP_SELF METHOD=POST>\n";
  print "<INPUT TYPE=HIDDEN NAME=action VALUE=send>\n";
  print "<TR><TD WIDTH=30%>お名前</TD><TD WIDTH=70%>$name</TD></TR>\n";
  print "<INPUT TYPE=HIDDEN NAME=sname VALUE=\"$name\">\n";
  print "<TR><TD WIDTH=30%>E-mail</TD><TD WIDTH=70%>$email</TD></TR>\n";
  print "<INPUT TYPE=HIDDEN NAME=semail VALUE=\"$email\">\n";
  if($hp != ""){
   print "<TR><TD WIDTH=30%>HomePage</TD><TD WIDTH=70%>$hp</TD></TR>\n";
   print "<INPUT TYPE=HIDDEN NAME=shp VALUE=\"$hp\">\n";
  }
  print "<TR><TD WIDTH=30%>住んでる地域</TD><TD WIDTH=70%>$area</TD></TR>\n";
  print "<INPUT TYPE=HIDDEN NAME=sarea VALUE=$area>\n";
  if($tel != ""){
   print "<TR><TD WIDTH=30%>お電話</TD><TD WIDTH=70%>$tel</TD></TR>\n";
   print "<INPUT TYPE=HIDDEN NAME=stel VALUE=\"$tel\">\n";
  }
  if($comment != ""){
   print "<TR><TD WIDTH=30%>ご意見</TD><TD WIDTH=70%>$comment</TD></TR>\n";
   print "<INPUT TYPE=HIDDEN NAME=scomment VALUE=\"$comment\">\n";
  }
  print "<TR><TD WIDTH=30%><FONT COLOR='red'><B>確認後押してね⇒</B></FONT></TD>\n";
  print "<TD WIDTH=70%><INPUT TYPE=SUBMIT NAME=Submit VALUE=送信する></TD></TR></FORM>\n";
  print "<FORM ACTION=$PHP_SELF METHOD=POST>\n";
  print "<INPUT TYPE=HIDDEN NAME=action VALUE=post>\n";
  print "<INPUT TYPE=HIDDEN NAME=name VALUE=\"\">\n";
  print "<TR><TD WIDTH=30%><FONT COLOR='blue'><B>送信を中止!⇒</B></FONT></TD>\n";
  print "<TD WIDTH=70%><INPUT TYPE=SUBMIT NAME=Submit VALUE=やっぱりやめる></TD></TR></FORM>\n";
  print "</TABLE></CENTER>\n";
 }
}
送信内容を確認する画面を生成する為の関数Kakunin( )を作ります。

最初に
グローバル変数を設定している点に注意して下さい。

最初に定番の文字処理を施しています。
nl2br( )関数は、PHP4の場合、改行文字を<br />(PHP3では<br>です。)に変換します。又、str_replace( )関数を使って、改行文字「\r」「\n」を空白に置換しています。

テキストファイルの改行文字は、それぞれのOSによって次のようになります。
DOSWindows 0D 0A (\r\n)
UNIX 0A (\n)
Machintosh 0D (\r)

後は、入力したデータによって送信内容を表組みに表示しています。受け取ったそれぞれのデータをHIDDENタイプでポストする際に、VALUEの値を「\"」で囲っていますが、これは文字列中に半角スペースがある場合のエラー対策です。ですから、変数
$areaに関しては中に半角スペースが入る危険性がない為、敢えてVALUEの値を「\"」で囲っていません。

送信内容を確認後、やっぱり送信を中止したい時の為に、初期画面に戻る為のフォームボタンを作りました。変数
$actionvalue=postとし、変数$namevalue=""として送信する事によって、確認画面を消去しています。
//====================メッセージ送信関数==================
function SendMessage(){
 global $to,$subject,$sname,$semail,$shp,$sarea,$stel,$scomment;
 $from = $semail;
 $header = "From: $from";
 $msg = "お名前 = $sname\n";
 $msg .= "E-mail = $semail\n";
 if($shp){ $msg .= "HomePage = $shp\n"; }
 if($sarea){ $msg .= "住んでる地域 = $sarea\n"; }
 if($stel){ $msg .= "お電話 = $stel\n"; }
 if($scomment){
  $scomment = str_replace("<br />", "\n", $scomment);
  $msg .= "ご意見 = $scomment\n";
 }
 if(mb_send_mail($to, $subject, $msg, $header)){
  print "メールが送信されました(^o^)丿上の更新ボタンを押して、初期画面に戻って下さい。\n";
 } else {
  print "メールの送信に失敗しました(>_<)上の更新ボタンを押して、やり直して下さい。\n";
 }
}
メッセージを送信する為の関数SendMessage( )を作ります。

最初に
グローバル変数を設定している点に注意して下さい。

変数
$headerにFromの内容を設定して一緒に送信しないと、メールの送信者情報が「Nobody」になってしまいます。又、変数$scommentの中の<br />をUNIX改行文字「\n」に変換して、メールでの改行処理を有効にしています。

★bool mb_send_mail ( string to, string subject, string message [ , string additional_headers ] )関数・・・引数to で指定された受信者に、引数message で指定された内容のメールを送信します。引数to の中で各アドレスをカンマで区切る事により、複数の宛先を指定出来ます。4番目の引数additional_headers が渡されると、ヘッダの最後に指定された追加のヘッダを挿入します。改行「\n」で区切る事で複数のヘッダを追加する事が出来ます。ただのmail関数では日本語が文字化けしてしまうので、mb_send_mail関数に変更しました。

最後に、メールが正常に送信された場合と、失敗した場合とのメッセージ表示を分けています。
//=======================メイン処理=========================
if($action == "post"){ Kakunin(); }
elseif($action == "send"){ SendMessage(); }
else{ }
条件分岐によって、処理を分けています。一応エラー処理の為、最後に空処理を付け加えています。
?> PHP終了の合図。
</TD></TR></TABLE></CENTER></FORM></BODY></HTML>  

 *上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。

HOME