
formail.cgi
次に送られてきたフォームのデータをデコードし、メールとして送るスクリプトです。perlというスクリプト言語を使ったCGIです。
それぞれの値は以下のような変数名に格納されてCGIに渡されています。
| お名前は? | name |
| 性別は? | sex |
| E-Mailアドレス | |
| どうやってこのページを知りましたか? | where |
| どのページがおもしろかったですか? | good |
| どのページが役に立ちましたか? | study |
| ご挨拶スペース | comment |
これをメールとして送るスクリプトは以下の通りです。
★最重要!これから説明するHTMLドキュメントやCGIはすべて、文字コードをEUC、改行コードをLFにします。CGIで文字コードを統一させる事もできますが、文字化け等のトラブルを極力減らすために、すべて、EUC,LFに統一するということにします。
#!/usr/local/bin/perl
$sendmail = '/usr/lib/sendmail';
$myaddress = 'yyy@xxx.xxx.or.jp';
require "cgi-lib.pl";
require "jcode.pl";
&ReadParse;
$agent = $ENV{'HTTP_USER_AGENT'};
$referer = $ENV{'HTTP_REFERER'};
$host = $ENV{'REMOTE_HOST'};
$name = $in{'name'};
$sex = $in{'sex'};
$email = $in{'email'};
$homepage = $in{'homepage'};
$where = $in{'where'};
$good = $in{'good'};
$study = $in{'study'};
$comment = $in{'comment'};
@good = &SplitParam($good);
@study = &SplitParam($study);
$comment =~ s/&/&/g;
$comment =~ s/</</g;
$comment =~ s/>/>/g;
$comment =~ s/\015/\012/g;
$comment =~ s/\015\012/\012/g;
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
$mon++;
@week = ('日','月','火','水','木','金','土');
$wday = $week[$wday];
if($email eq ""){
print<<Error_Message;
Content-type: text/html
<HTML><HEAD><TITLE>Error</TITLE></HEAD>
<BODY><CENTER><H2>メールアドレスを必ずお書きください</H2><BR>
<B>ブラウザのバックボタンでお戻りください</B></CENTER>
</BODY></HTML>
Error_Message
}else{
# 以下、メール送信;
$message = <<END_OF_MESSAGE;
Subject: enquete
Reply-To: $email
■年月日
$year/$mon/$mday($wday) $hour:$min:$sec
■ブラウザ
$agent
■リンク先
$referer
■プロバイダー
$host
■お名前
$name
■性別
$sex
■メールアドレス
$email
■ホームページ
$homepage
■このWebを見つけたきっかけ
$where
■面白かったページ
$good[0]
$good[1]
$good[2]
$good[3]
$good[4]
■為になったページ
$study[0]
$study[1]
$study[2]
$study[3]
$study[4]
$study[5]
■コメント
$comment
END_OF_MESSAGE
&jcode'convert(*message,'jis');
open(MAIL,"|$sendmail $myaddress");
print MAIL $message;
close(MAIL);
print <<END_OF_HTML;
Content-type: text/html
<HTML>
<HEAD><TITLE>TANKS</TITLE>
</HEAD>
<BODY>
<H1>以下のように書き込みました。</H1><BR>
年月日:$year/$mon/$mday<BR>
お名前:$name<BR>
性別 :$sex<BR>
E-Mail:$email<BR>
HOMEPAGE:$homepage<BR>
きっかけ:$where<BR>
END_OF_HTML
print "<B>面白かったページ</B>:<BR>\n";
foreach $goods(@good){
print "${goods}<BR>\n";
}
print "<B>ためになったページ</B>:<BR>\n";
foreach $studys(@study){
print "${studys}<BR>\n";
}
print <<END_OF_HTML;
<B>コメント</B>:$comment<P>
これはメールでホームページ作者に送られます。
</BODY>
</HTML>
END_OF_HTML
exit;
では簡単に説明しておきます。特にHTMLのフォームの方でNAME="xxx"で指定した名前が、ここでは活躍しますので、もう一度HTMLで付けた名前を確認しておいてください。
#!/usr/local/bin/perl
$sendmail = '/usr/lib/sendmail';
$myaddress = 'yyy@xxx.xxx.or.jp';
require "cgi-lib.pl"; require "jcode.pl";
&ReadParse;
$agent = $ENV{'HTTP_USER_AGENT'};
$referer = $ENV{'HTTP_REFERER'};
$host = $ENV{'REMOTE_HOST'};
$name = $in{'name'};
$sex = $in{'sex'};
$email = $in{'email'};
$homepage = $in{'homepage'};
$where = $in{'where'};
$good = $in{'good'};
$study = $in{'study'};
$comment = $in{'comment'};
@good = &SplitParam($good); @study = &SplitParam($study);
$comment =~ s/&/&/g; $comment =~ s/</</g; $comment =~ s/>/>/g;
$comment =~ s/\015/\012/g; $comment =~ s/\015\012/\012/g;
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
$mon++;
@week = ('日','月','火','水','木','金','土');
$wday = $week[$wday];
if($email eq ""){
print<<Error_Message;
Content-type: text/html
<HTML><HEAD><TITLE>Error</TITLE></HEAD>
<BODY><CENTER><H2>メールアドレスを必ずお書きください</H2><BR>
<B>ブラウザのバックボタンでお戻りください</B></CENTER>
</BODY></HTML>
Error_Message
}else{
$message = <<END_OF_MESSAGE; Subject: enquete Reply-To: $email
■年月日 $year/$mon/$mday($wday) $hour:$min:$sec
■ブラウザ $agent
■リンク先 $referer ■プロバイダー $host ■お名前 $name ■性別 $sex ■メールアドレス $email ■ホームページ $homepage ■このWebを見つけたきっかけ $where ■面白かったページ $good[0] $good[1] $good[2] $good[3] $good[4] ■為になったページ $study[0] $study[1] $study[2] $study[3] $study[4] $study[5]
■コメント $comment END_OF_MESSAGE
&jcode'convert(*message,'jis');
open(MAIL,"|$sendmail $myaddress");
print MAIL $message;
close(MAIL);
print <<END_OF_HTML;
Content-type: text/html
<HTML>
<HEAD><TITLE>TANKS</TITLE>
</HEAD>
<BODY>
<H1>以下のように書き込みました。</H1><BR>
年月日:$year/$mon/$mday<BR>
お名前:$name<BR>
性別 :$sex<BR>
E-Mail:$email<BR>
HOMEPAGE:$homepage<BR>
きっかけ:$where<BR>
END_OF_HTML
print "<B>面白かったページ</B>:<BR>\n";
foreach $goods(@good){
print "${goods}<BR>\n";
}
print "<B>ためになったページ</B>:<BR>\n";
foreach $studys(@study){
print "${studys}<BR>\n";
}
print <<END_OF_HTML;
<B>コメント</B>:$comment<P>
これはメールでホームページ作者に送られます。 </BODY> </HTML> END_OF_HTML
exit;
上記をコピーしてもいいのですが、必要なものをアーカイブでまとめてありますので、ダウンロードしてください。(すべて文字コードはEUC、改行コードはLFになっていますので、EUC
LFに対応したエディタが必要です)
Windows版は解凍にLHAソフトが必要です。ディレクトリ付で解凍してください。
Macintosh版は解凍にStuffIt Expanderが必要です。
ZAPさんのフリーソフトダウンロードページへ ←ここをクリックする
★かならず文字コードをEUC、改行コードをLFにしてください。