応用1:フォームの入力をメールで送る


[ その1 | その2 ]

★入力内容をメールで送付(その1)-最も単純なもの

まず、メモに入力してもらい「送信」をクリックすると内容を決められたメールアドレスに送るというものを作ろう。
<FORM ACTION="mailto:mail address" METHOD="post">
とすれば簡単にメールで送れますが、エンコードされて送られるため、送られた内容をデコードしないと読めません。

そこで、まずは送られてきた内容と送り主の情報が通常のメールとして送られてくるような CGI を作成しましょう。また、CGI の実行結果としてブラウザに送信完了のメッセージを送ります。


意見を入力し送信して下さい

(注)実際には、メールを送信する部分はコメントにしてあります。


送信フォームのソース
<FORM ACTION="appl1-1.cgi" METHOD="POST">
意見を入力し送信して下さい
  <TEXTAREA ROWS=4 COLS=40 NAME="message"></TEXTAREA>
  <INPUT TYPE="submit" VALUE="送信">
  <INPUT TYPE="reset" VALUE="クリア">
</FORM>

  == ソース [appl1-1.cgi]==
#!/usr/local/bin/perl
require 'jcode.pl';
$sender = 'yama@main.eng.hokudai.ac.jp';
$sendmail = '/usr/lib/sendmail -t -n -oi';
$nkf = '/usr/local/bin/nkf';
#
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    read(STDIN, $_, $ENV{'CONTENT_LENGTH'});
} else {
    $_=$ENV{'QUERY_STRING'};
}
($a,$_) = split('=',$_);
tr/+/ /;
s/%([\da-fA-F][\da-fA-F])/pack("C",hex($1))/eg;
&jcode'convert(*_,'euc');
$input=$_;
# 
$useraddr = $ENV{"REMOTE_ADDR"};
$userhost = $ENV{"REMOTE_HOST"};
$datecmd=`date`;
chop($datecmd);
@date=split(/ /,$datecmd);
$date = "@date[5,1,2] ($date[0]) $date[3]";
# mail
open(MAIL, "| $nkf -j | $sendmail") || die;
print MAIL "To: $sender\n";
print MAIL "Subject: send memo by HomePage\n\n";
print MAIL '送信時刻: '," $date\n";
print MAIL '送信者アドレス: '," $useraddr\n";
print MAIL '送信者ホスト名: '," $userhost\n\n";
print MAIL 'メモ: ',"\n";
print MAIL "$input\n";
close(MAIL);
# 
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n";
print "  <TITLE>Guest Book</TITLE>\n";
print "  <META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=EUC-JP\">";
print "</HEAD>\n";
print "<BODY BGCOLOR=FFFFFF>";
print '送信は成功しました',"<P>\n\n";
print '送信内容-------',"<BR>\n";
print '送信時刻: '," $date<BR>\n";
print '送信者アドレス: '," $useraddr<BR>\n";
print '送信者ホスト名: '," $userhost<BR>\n\n";
print 'メモ: ',"<BR>\n";
print "$input\n";
print "<HR>\n";
print "<A HREF=\"appl1.html\">",'戻る',"</A>\n";
print "</BODY>\n";
print "</HTML>\n";
exit;


★入力内容をメールで送付(その2)- 複数の項目がある

次に、幾つかの入力項目がある場合を考え、入力された内容をメールとして送信する処理を考えましょう。
以下の項目に入力し送信して下さい
氏名:
今の気分は?
大変良い! それほどでも 最悪
メモ:

(注)実際には、メールを送信する部分はコメントにしてあります。


送信フォームのソース
<FORM ACTION="appl1-2.cgi" METHOD="POST">
以下の項目に入力し送信して下さい<BR>
氏名: <INPUT TYPE="text" NAME="name"> <BR>
  今の気分は?<BR>
  <INPUT TYPE="radio" NAME="feel" VALUE="1" CHECKED>大変良い! 
  <INPUT TYPE="radio" NAME="feel" VALUE="2">それほどでも
  <INPUT TYPE="radio" NAME="feel" VALUE="3">最悪<BR>
メモ: <BR>
  <TEXTAREA ROWS=4 COLS=40 NAME="message"></TEXTAREA><BR>
  <INPUT TYPE="submit" VALUE="送信">
  <INPUT TYPE="reset" VALUE="クリア">
</FORM>

  == ソース [appl1-2.cgi]==




最終更新 :
Yoshiro Yamamoto <yama@main.eng.hokudai.ac.jp>