mailto を改良して、フィードバック専用にしてちょっ と使いやすくしてみました。
ページ下部のアンケートも、この feedback.cgi を使ってます。
mailto から feedback への新機能
<script language="JavaScript" src="/~nkon/cgi-bin/mailto2.cgi?encode=jis"></script>
mailto 以来の機能
短いプログラムなので、下に全リストを示します。
てきとうにコピーしてお使い下さい。無保証です。
#!/usr/bin/perl
use Mail::Sendmail;
require './lib/jcode.pl';
$MAIL_TO = "xxx\@xxx.example.com";
$MAIL_FROM = "xxx\@xxx.example.com";
$addr = $ENV{'REMOTE_ADDR'};
$host = $ENV{'REMOTE_HOST'};
if (($host eq "") || ($host eq $addr)) {
$ENV{'REMOTE_HOST'} = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
foreach $env (keys %ENV){
$log_all .= "$env = $ENV{$env}\n";
}
$log_all .= "\n";
# PARSE INPUT
if ($ENV{'REQUEST_METHOD'} eq "POST"){
# POST method の時はメールと thank you message(自動リターン) を表示
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buf);
foreach $pair (@pairs){
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode::convert(*value, 'jis');
$ARG{$key} = $value;
push(@ARG_LIST, $key);
}
$content = <<"CONTENT";
REMOTE_HOST: $ENV{'REMOTE_HOST'}
REMOTE_ADDR: $ENV{'REMOTE_ADDR'}
HTTP_ACCEPT: $ENV{'HTTP_ACCEPT'}
HTTP_USER_AGENT: $ENV{'HTTP_USRE_AGENT'}
HTTP_REFERER: $ENV{'HTTP_REFERER'}
CONTENT
foreach $item (@ARG_LIST){
$content .= "$item: $ARG{$item}\n";
}
$mail{'Sender'} = $MAIL_FROM;
$mail{'Subject'} = $ARG{'Subject'} if ($ARG{'Subject'});
$mail{'To'} = $MAIL_TO;
$mail{'Body'} = $content;
$mail{'Content-type'} = "text/plain; charset=ISO-2022-JP";
sendmail(%mail);
print "Content-type: text/html;charset=EUC-JP\n\n";
print <<"HTML";
<html><head>
<title>Thank you for your mail.</title>
<meta http-equiv="Content-Type" content="text/html;charset=EUC_JP">
<meta http-equiv="REFRESH" content="3;URL=$ENV{'HTTP_REFERER'}">
</head>
<body>
<h1>Thank you for your mail.</h1>
<p>
メールの送信をありがとうございました。自動的に元のページに戻ります。
</p>
<p><a href="$ENV{'HTTP_REFERER'}">戻る</a></p>
</body></html>
HTML
exit;
} else { # GET method の時はフォームを表示
$buf = $ENV{'QUERY_STRING'};
@pairs = split(/&/, $buf);
foreach $pair (@pairs){
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$ARG{$key} = $value;
}
if ($ARG{'encode'}){
if ($ARG{'encode'} eq 'euc_jp'){
$encode = 'euc';
$html_charset=';charset=EUC_JP';
} elsif ($ARG{'encode'} eq 'shift_jis'){
$encode = 'sjis';
$html_charset=';charset=Shift_JIS';
} elsif ($ARG{'encode'} eq 'jis'){
$encode = 'jis';
$html_charset=';charset=ISO-2022-JP';
} else { # default
$encode = 'euc';
$html_charset=';charset=EUC_JP';
}
}
foreach $key (keys %ARG){
$tmp = $ARG{$key};
&jcode::convert(*tmp, $encode);
$ARG{$key} = $tmp;
}
$str= <<"HTML";
<form method="POST" action="/~nkon/cgi-bin/feedback.cgi">
<input type="hidden" name="Subject" value="Feedback Form">
<font color="red">この情報があなたの探していたものかどうか、フィードバックの投票をお願いします。</font><br>
<input type="radio" name="check" value="just">just/まさにこれだ!
<input type="radio" name="check" value="a_little">a little/かすってる!
<input type="radio" name="check" value="info">info/参考にさせてもらうよ!
<input type="radio" name="check" value="no">no/違う!
<br>
<input type="submit" value="Feedback"><br>
どのような情報をお求めですか。感想はいかがですか?<br>
よろしければ、ご自由にご記入下さい。<br>
<textarea name="content" rows=5 cols=80>
</textarea>
HTML
$str =~ s/\n//g;
&jcode::convert(*str, $encode);
print "Content-type: text/plain$html_charset\n\n";
print "document.write('$str');\n";
exit;
}
exit;
↓くっついています。Let's View Source
リンクは歓迎です。断りなく、自由に行っていただいてかまいません。