#!/usr/bin/perl use strict; use Jcode; use vars qw(%FORM); { my ($name,$value,$buffer); &error('POSTでおねがいします・') if($ENV{'REQUEST_METHOD'} ne 'POST'); &error('ながいです') if($ENV{'CONTENT_LENGTH'} > 150); read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); foreach (split /&/,$buffer) { ($name, $value) = split /=/; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg; $value =~ s/[^\w\.\@\-]//g; $value =~ tr/\x00-\x1f//; $FORM{$name} = $value; } &error('メールアドレスをいれてほしいな(>_<)') if(!$FORM{'mail'}); &error('メールアドレスをいれてほしいな(>_<)') if($FORM{'mail'} !~ m|\@|); } { # メール本文入れてね my $mail =<<'EOM'; 例のURLをお送りいたします。 http://www.example.com/~dolly/i/ EOM &SendMail( Program => '/usr/sbin/sendmail', # メール送るやつのパス To => $FORM{'mail'}, From => 'dolly@example.com', # 送信者メールアドレス FromName => '株式会社ドリー', # 送信者名 Subject => '例のURLをお送りいたします。', # メール題名 Message => $mail ); # 送信完了ページHTML print "Content-Type: text/html; charset=shift_jis\n\n"; print <<'EOP';
送信完了しました!
EOP } sub SendMail { my %OPT = @_; open(MAIL,"| $OPT{'Program'} -t") or &error('メール送信失敗(>o<)'); print MAIL 'To: '.$OPT{'To'}."\n"; print MAIL 'From: '.&mail64($OPT{'FromName'}).' <'.$OPT{'From'}.'>'."\n"; print MAIL 'Subject: '.&mail64($OPT{'Subject'})."\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: Dolly's bad and cool mailer ver0.1\n\n"; print MAIL jcode($OPT{'Message'})->h2z->jis."\n"; close(MAIL); return 1; } sub mail64 { my ($hehe) = @_; my ($i,$x,$y,$z); $hehe =~ s/\x1b\x28\x42/\x1b\x28\x4a/g; $x = unpack("B*",$hehe); for ($i=0; $y=substr($x,$i,6); $i+=6) { $z .= substr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", ord(pack("B*", "00" . $y)), 1); if (length($y) == 2) {$z .= "==";} elsif (length($y) == 4) {$z .= "="; } } return "=?iso-2022-jp?B?".$z."?="; } sub error { # エラーページHTML print "Content-Type: text/html; charset=shift_jis\n\n"; print <<"EOP";エラーです:$_[0]
EOP exit; }