#!/web/mc/cgi-bin/perl2.0 ;# WebFORM v4.0 by kaja@Tetsu. (SJIS仕様) #------ 初期設定 ---------------------------------------------------------- #■日本語コード変換ライブラリ require '/web/mc/cgi-bin/jcode.pl'; #■SENDMAILの設定 $sendmail = 'usr/sbin/sendmail'; #■受信先メールアドレス $mailto = 'motorcycle@yokohama-city.com'; #■名称 $title = 'Development'; #■処理画面のボディ設定 $body = ''; #■記入者申告メールアドレス( name="email"の時 )未入力でも送信する 1:する 0:しない $mailcheck = 1; #-------------------------------------------------------------------------- #時刻取得 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($month < 10) { $month = "0$month"; } if ($mday < 10) { $mday = "0$mday"; } if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } $month = ($mon + 1); $wday = ('SUN','MON','TUE','WED','THU','FRI','SAT')[$wday]; $date_now = "$month\/$mday $wday $hour\:$min"; #タイトル欄に入力がない場合のデフォルト値 $subject = "- NO SUBJECT -"; #データ入力 if ($ENV{'REQUEST_METHOD'} ne "POST") { &error('エラー','標準入力 METHOD=POST を設定してください.
<form method=post action=........>'); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); if ($buffer eq '') { &error('エラー','このCGIは直接起動されません.'); } $ref = $ENV{'HTTP_REFERER'}; $buffer2 = $ENV{'QUERY_STRING'}; if ($buffer2 ne '') { &error('エラー','標準入力 METHOD=POST に設定してください.
<form method=post action=........>'); } #デコード @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); if ($value =~ /\r\n/) { $value =~ s/\r//g; } elsif ($value =~ /\r/) { $value =~ s/\r/\n/g; } if ($name eq "location") { $lct = $value; } elsif ($name eq "c_copy" && $value eq "on") { $cc = "on"; } elsif ($name eq "no_check" && $value eq "on") { $nocheck = "on"; } elsif ($name eq "space_check" && $value eq "on") { $spcheck = "on"; } elsif ($name eq "no_check") { ; } elsif ($name eq "ref_url") { $ref_url = $value; } elsif ($name eq "ref_name") { $ref_name = $value; } elsif ($name eq "subject" && $value ne "") { $subject = $value; } elsif ($name eq "subject") { ; } elsif ($name eq "ref_page") { $ref = $value; } elsif ($name eq "password") { $password = $value; push(@DATA_N,$name); push(@DATA_V,$value); } else { if ($name =~ /^email/i || $name =~ /^e\-mail/i) { $value =~ s/ / /g; if ($value =~ / / || $value =~ /;/) { $value = ""; } if (!($value =~ /(.*)\@(.*)\.(.*)/)) { $value = ""; } $email = $value; } push(@DATA_N,$name); push(@DATA_V,$value); $name =~ s/\/>/g; $value =~ s/\>/>/g; $name =~ s/\"/"/g; $value =~ s/\"/"/g; push(@DATA_NS,$name); push(@DATA_VS,$value); } } #入力チェック if (!$mailcheck && $email eq '') { &error('Eメールを入力してください',''); } if ($mailcheck && $email eq '') { $email = 'anonymous@on.the.net'; } if ($spcheck eq "on") { foreach (@DATA_V) { if ($_ eq "") { &error('送信不可','受信者の意向により、全ての項目を埋めないと送信できません.'); } }} if ($mailto eq '' || !($mailto =~ /(.*)\@(.*)\.(.*)/)) { &error('設定ミス','受信先メールアドレスが設定されていません.'); } if ($nocheck eq "on") { &sendmail; } #内容確認画面出力 print "Content-type: text/html\n\n"; print " $title $body

内容確認

修正したい場合は、ブラウザの【戻る】ボタンで戻って下さい。
"; $count = @DATA_NS; foreach (0..$count-1) { print "\n"; print ""; if ($DATA_VS[($_)] =~ /\n/) { print "\n"; } else { print "\n"; } print "\n"; } print "
項目内容
$DATA_NS[($_)]
$DATA_VS[($_)]
$DATA_VS[($_)]

\n"; if ($lct ne "") { print "\n"; } print "\n"; print "\n"; if ($cc eq "on") { print "\n"; } if ($ref_url ne "") { print "\n"; } if ($ref_name ne "") { print "\n"; } if ($subject ne "") { print "\n"; } if ($password ne "") { print "\n"; } if ($email eq '') { print "メールアドレスを入力しないと送信できません

\n"; } else { print "

\n"; } print " 修正したい場合は、ブラウザの【戻る】ボタンで戻って下さい。

\n"; print "


\n"; print "送信先:$mailto\n"; print "

\n"; exit; sub sendmail { if (!(open(OUT,"| $sendmail -t"))) { &error('システム異常','申し訳ありませんが何らかの原因で処理できません.'); } print OUT "X-Mailer: WebMail v4.0 by Creative Works\n"; print OUT "X-HTTP_REFERER: $ref\n"; print OUT "Errors-To: $mailto\n"; print OUT "To: $mailto\n"; print OUT "From: $email\n"; &jis("Subject: $subject"); print OUT "$msg\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n\n"; &jis("----------------------------------------"); print OUT "$msg\n\n"; $count = @DATA_N; foreach (0..$count-1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] = $DATA_V[$_]"); print OUT "$msg\n"; } } &jis("----------------------------------------"); print OUT "\n$msg\n"; $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; } print OUT "Remote-host : $host\n"; print OUT "Remote-Addr : $ENV{'REMOTE_ADDR'}\n"; print OUT "----------------------------------------"; close(OUT); if ($cc eq "on" && $lct ne '') { print "Content-type: text/html\n\n"; print "$title\n"; print "$body\n"; print "

送信完了

\n"; print "ただ今$mailto宛てに送信された内容は以下の通りです.
\n"; print "内容の写しとしてお控えください.

\n"; print "

\n"; print "
\n"; print "

\n"; print "

[コピーしたら次へ]

"; } elsif ($cc eq "on") { print "Content-type: text/html\n\n"; print "$title\n"; print "$body\n"; print "

送信完了

\n"; print "ただ今$mailto宛てに送信された内容は以下の通りです.
\n"; print "内容の写しとしてお控えください.

\n"; print "

\n"; print "
\n"; print "

\n"; if ($ref_url ne '' && $ref_name ne '') { &jcode'convert(*ref_name,'sjis'); print "

[$ref_name]

"; } print "\n"; } elsif ($lct ne '') { print "Location: $lct\n\n"; } else { print "Content-type: text/html\n\n"; print "$title\n"; print "$body\n"; print "

送信完了

\n"; print "ご記入されたものは$mailto宛てに電子メールされました.
\n"; print "Thank you for sending comments to $mailto .

\n"; if ($ref_url ne '' && $ref_name ne '') { &jcode'convert(*ref_name,'sjis'); print "

[$ref_name]

"; } print "

\n"; } exit; } sub cc { print "X-Processed: $date_now\n"; print "X-HTTP_REFERER: $ref\n"; print "X-HTTP-User-Agent: $ENV{'HTTP_USER_AGENT'}\n"; print "X-Remote-host: $host \[$ENV{'REMOTE_ADDR'}\]\n"; print "To: $mailto\n"; print "Subject: $subject\n\n"; foreach (0..$count-1) { if ($DATA_VS[$_] =~ /\n/) { print "$DATA_NS[$_] =\n\n$DATA_VS[$_]\n"; } else { print "$DATA_NS[$_] = $DATA_VS[$_]\n"; } } } sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); } sub error { print "Content-type: text/html\n\n"; print "$title\n"; print "$body\n"; print "

$_[0]

\n"; print "

$_[1]

\n"; if ($ref eq '') { print "※ フォームページが取得できません.
\n"; print "※ ブラウザの[戻る]ボタンを押して前の画面に移動してください.

\n"; } else { print "※ フォームページ $ref
\n"; print "※ フォームページへ戻るか、ブラウザの[戻る]ボタンを押して前の画面に移動してください.

\n"; } print "

\n"; exit; }