#!/usr/local/bin/perl ################################################## # WebMasterTools スキームメールフォーム β1 # Created by WEB新撰組 萩原逸郎 # Created on 2002年04月01日 ################################################## $|=1; use CGI qw/:standard/; use Jcode; ########################### # 初期設定 ########################### #ベースURL $BaseURL = 'http://www.haraguti.com/sp/mailform/'; #このCGIのURL $CgiURL=$BaseURL . 'cgi-bin/sendmail.cgi'; #このCGIのタイトル $CgiTitle='メールフォーム管理メニュー'; #ベースディレクトリ $BaseDir='public_html/sp/mailform/'; #データファイル $MailFile = $BaseDir . 'data/sendmaildata.txt'; #HTMLディレクトリ $HTMLDir = $BaseDir . 'sample/'; #Sendmailへのパス $SendmailCmnd='/usr/sbin/sendmail -n -t '; ########################### # 初期設定ここまで ########################### if(param('action')){ $action = param('action'); }else{ $action = 'check_data'; } if($action eq 'go_sendmail'){ ############################ # 送信 ############################ &GoSendmail; }elsif($action eq 'check_data'){ ############################ # 確認画面 ############################ &CheckData; }else{ &error(500,'予期せぬエラー'); } exit; ############################ # 送信 ############################ sub GoSendmail { if(param('Param_formname')){ $formname = param('Param_formname'); $formname =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; }else{ &error(100,'送信フォームに誤りがあります'); } open IN,"$MailFile"; while(){ $data = $_; chop $data; ($fformname)=(split(/Enc_Sep_Code/,$data))[0]; if($fformname eq $formname){ $formdata = $data; } } close IN; if(!$formdata){ &error(110,'送信フォームに誤りがあります'); } if(param('Param_endhtml')){ $endhtml = param('Param_endhtml'); $endhtml =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; }else{ &error(130,'送信フォームに誤りがあります'); } @admy = param; foreach $key (@admy){ if($key =~ /^Param_title_/){ push @title_keys,$key; } } foreach $tkey (@title_keys){ undef($data); $hflag=0; $key = $tkey; $key =~ s/^Param_title_//; $title = param($tkey); $data = param($key); $line = join(',',$title,$data); push @alldata,$line; if($key eq 'mailadd'){ $mailadd = $data; } } ($fformname,$fmailfrom,$fmailto,$fmailcc,$fmailbcc,$fsubject_a,$fsubject_b,$fhead_a,$fhead_b,$fsign_a,$fsign_b)=split(/Enc_Sep_Code/,$formdata); $fmailfrom =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fmailto =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fmailcc =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fmailbcc =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fsubject_a =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fsubject_b =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fhead_a =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fhead_b =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fsign_a =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fsign_b =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $fsubject_a = jcode($fsubject_a)->mime_encode(); $fhead_a = jcode($fhead_a)->jis; $fsign_a = jcode($fsign_a)->jis; $fsubject_b = jcode($fsubject_b)->mime_encode(); $fhead_b = jcode($fhead_b)->jis; $fsign_b = jcode($fsign_b)->jis; if($mailadd){ $mailadd =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $mailhead_a = <<"EOL"; Content-Type: text/plain; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit From: $fmailfrom To: $mailadd Subject: $fsubject_a $fhead_a EOL } if($mailadd){ $fmailfrom = $mailadd; } $mailhead_b = <<"EOL"; Content-Type: text/plain; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit From: $fmailfrom To: $fmailto EOL if($fmailcc){ $mailhead_b .= <<"EOL"; Cc: $fmailcc EOL } if($fmailbcc){ $mailhead_b .= <<"EOL"; Bcc: $fmailbcc EOL } $mailhead_b .= <<"EOL"; Subject: $fsubject_b $fhead_b EOL foreach $val (@alldata){ ($title,$data)=split(/\,/,$val); $title =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $title = jcode($title)->jis; $data = jcode($data)->jis; $mailtxt .= <<"EOL"; $title $data EOL } if($mailhead_a){ $mail = <<"EOL"; $mailhead_a $mailtxt $fsign_a EOL open SMTP,"| $SendmailCmnd"; print SMTP $mail; close SMTP; } $mail = <<"EOL"; $mailhead_b $mailtxt $fsign_b EOL open SMTP,"| $SendmailCmnd"; print SMTP $mail; close SMTP; $endhtml = $HTMLDir . $endhtml; open IN,"$endhtml"; while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-DATA_LOOP\-\->/); $HTML_HEAD .= $data; } while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-DATA_LOOP_END\-\->/); $DATALOOP .= $data; } while(){ $data = $_; $data = jcode($data)->euc; $data =~ s||
W.M.T β1 Web新撰組
|i; $HTML_FOOT .= $data; } close IN; $HTML = "Content-type: text/html\n\n"; $HTML .= $HTML_HEAD; foreach $val (@alldata){ ($title,$data)=split(/\,/,$val); $title =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $title =~ s//>/g; $data =~ s//>/g; $data =~ s/\n/
/g; $LOOPDMY = $DATALOOP; $LOOPDMY =~ s/<\!\-\-KEY\-\->/$title/; $LOOPDMY =~ s/<\!\-\-VALUE\-\->/$data/; $HTML .= $LOOPDMY; } $HTML .= $HTML_FOOT; $HTML = jcode($HTML)->sjis; print $HTML; } ############################ # 確認画面 ############################ sub CheckData { use Mail::CheckUser qw(check_email); if(param('Param_formname')){ $formname = param('Param_formname'); }else{ &error(100,'送信フォームに誤りがあります'); } open IN,"$MailFile"; while(){ $data = $_; chop $data; ($fformname)=(split(/Enc_Sep_Code/,$data))[0]; if($fformname eq $formname){ $formdata = $data; } } close IN; if(!$formdata){ &error(110,'送信フォームに誤りがあります'); } if(param('Param_checkhtml')){ $checkhtml = param('Param_checkhtml'); }else{ &error(120,'送信フォームに誤りがあります'); } if(param('Param_endhtml')){ $endhtml = param('Param_endhtml'); $endhtml =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; }else{ &error(130,'送信フォームに誤りがあります'); } if(param('Param_hissu')){ @hissu = param('Param_hissu'); } @admy = param; foreach $key (@admy){ if($key =~ /^Param_title_/){ push @title_keys,$key; } } $FORM = <<"EOL";
EOL foreach $data (@hissu){ $data =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $FORM .= <<"EOL"; EOL } foreach $key (@title_keys){ $data = param($key); $data =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $data = jcode($data)->h2z->euc; $data =~ s/\r\n/\n/g; $data =~ s/\n//g; $FORM .= <<"EOL"; EOL } foreach $tkey (@title_keys){ undef($data); $hflag=0; $key = $tkey; $key =~ s/^Param_title_//; $title = param($tkey); $title = jcode($title)->h2z->euc; foreach $dmy (@hissu){ if($dmy eq $key){ $hflag = 1; last; } } if(param($key)){ $data = param($key); if($key =~ /^mail/){ if(! check_email($data)) { push @errors,"$titleに誤りがあります"; } }elsif($key =~ /^zip/){ if($data =~ /[^0-9\-]/){ push @errors,"$titleは半角数字で記入して下さい"; } }elsif($key =~ /^tel|^fax/){ if($data =~ /[^0-9\-\(\)]/){ push @errors,"$titleは半角数字で記入して下さい"; } } }else{ if($hflag == 1){ push @errors,"$titleを入力して下さい"; } } $data = jcode($data)->h2z->euc; $data =~ s/\r\n/\n/g; $data =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $FORM .= <<"EOL"; EOL } if(@errors){ $errflag = 1; } $checkhtml = $HTMLDir . $checkhtml; open IN,"$checkhtml"; while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-IF_OK\-\->/); $HTML_HEAD .= $data; } if($errflag){ while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-IF_ERROR\-\->/); } while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-DATA_LOOP\-\->/); $HTML_HEAD .= $data; } while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-DATA_LOOP_END\-\->/); $DATALOOP .= $data; } while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-END_IF\-\->/); $HTML_FOOT .= $data; } while(){ $data = $_; $data = jcode($data)->euc; $HTML_FOOT .= $data; } }else{ $FORM_END = <<"EOL"; EOL while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-DATA_LOOP\-\->/); $data =~ s/<\!\-\-FORM_START\-\->/$FORM/; $HTML_HEAD .= $data; } while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-DATA_LOOP_END\-\->/); $DATALOOP .= $data; } while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-IF_ERROR\-\->/); $data =~ s/<\!\-\-FORM_END\-\->/$FORM_END/; $HTML_FOOT .= $data; } while(){ $data = $_; $data = jcode($data)->euc; last if($data =~ /<\!\-\-END_IF\-\->/); } while(){ $data = $_; $data = jcode($data)->euc; $data =~ s||
W.M.T β1 Web新撰組
|i; $HTML_FOOT .= $data; } } close IN; $HTML = "Content-type: text/html\n\n"; $HTML .= $HTML_HEAD; if($errflag){ foreach $err (@errors){ $LOOPDMY = $DATALOOP; $LOOPDMY =~ s/<\!\-\-VALUE\-\->/$err/; $HTML .= $LOOPDMY; } }else{ foreach $tkey (@title_keys){ $key = $tkey; $key =~ s/^Param_title_//; $title = param($tkey); $title = jcode($title)->h2z->euc; $value = param($key); $value = jcode($value)->h2z->euc; $value =~ s/\r\n/\n/g; $value =~ s//>/g; $value =~ s/\n/
/g; $LOOPDMY = $DATALOOP; $LOOPDMY =~ s/<\!\-\-KEY\-\->/$title/; $LOOPDMY =~ s/<\!\-\-VALUE\-\->/$value/; $HTML .= $LOOPDMY; } } $HTML .= $HTML_FOOT; $HTML = jcode($HTML)->sjis; print $HTML; } ################ # エラー ################ sub error { my($num,$word,$flag)=@_; if($flag == 1){ &Lock(0); } my $errhtml = $HTMLDir . 'error.html'; $HTML = "Content-type: text/html\n\n"; open IN,"$errhtml"; while(){ $data = $_; $data = jcode($data)->euc; $data =~ s/<\!\-\-ERROR_WORD\-\->/$word/; $data =~ s/<\!\-\-ERROR_NUM\-\->/$num/; $HTML .= $data; $data =~ s||
W.M.T β1 Web新撰組
|i; } close IN; $HTML = jcode($HTML)->sjis; print $HTML; exit; }