#!/usr/bin/perl $dir = 'webmail'; $sendmail = '/usr/lib/sendmail'; $success_file = 'success.html'; %v = &GetCgiVars; $subject = $v{'subject'}; $password = $v{'password'}; $body = $v{'body'}; $to = $v{'to'}; $from = $v{'from'}; &PukeOnEm("請填完所有項目!") if ($subject eq '' || $body eq ''||$from eq ''||$to eq ''); open (MailProgram, "| $sendmail -t") || &PukeOnEm("Can't open sendmail: $!"); print MailProgram "To: $to\n"; print MailProgram "From: $from\n"; print MailProgram "Subject: $subject\n\n"; print MailProgram "$body\n"; close MailProgram; &Success; exit ; sub GetCgiVars { local($in, %in) ; local($name, $value) ; # First, read entire string of CGI vars into $in if ($ENV{'REQUEST_METHOD'} eq 'GET') { $in = $ENV{'QUERY_STRING'} ; } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { if ($ENV{'CONTENT_TYPE'}=~ m#^application/x-www-form-urlencoded$#i) { $ENV{'CONTENT_LENGTH'} || &PukeOnEm("No Content-Length sent with the POST request."); read(STDIN, $in, $ENV{'CONTENT_LENGTH'}) ; } else { &PukeOnEm("Unsupported Content-Type: $ENV{'CONTENT_TYPE'}") ; } } else { &PukeOnEm("Script was called with unsupported REQUEST_METHOD.") ; } # Resolve and unencode name/value pairs into %in foreach (split('&', $in)) { s/\+/ /g ; ($name, $value)= split('=', $_, 2) ; $name=~ s/%(..)/sprintf("%c",hex($1))/ge ; $value=~ s/%(..)/sprintf("%c",hex($1))/ge ; $in{$name}.= ' ' if defined($in{$name}) ; # concatenate multiple var $in{$name}.= $value ; } return %in ; } # Die, outputting HTML error page # If no $title, use a default title sub PukeOnEm { local($msg,$title)= @_ ; $title || ($title= "輸入錯誤") ; print < $title

$title

$msg

EOF exit ; } sub Success { print "Content-type: text/html\n\n"; print <<"READYCAR"; 你的郵件已成功發出! READYCAR exit; }