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
リンクは歓迎です。断りなく、自由に行っていただいてかまいません。