#!/usr/bin/perl require "./conf.cgi"; $mailcmd = '/usr/sbin/sendmail'; #==================================================================== # 自己診断機能。 #==================================================================== # メール送信がうまく動作しない時に、 # http://〜/〜/wwwmail.cgi?test の形式で呼び出してください。 if ($ENV{'REQUEST_METHOD'} eq "GET") { print "Content-type: text/html; charset=EUC-JP\n"; print "\n"; print "\n"; print "
\n"; print "CGIは正常に動作しています。
\n"; unless (-f $mailcmd) { print "$mailcmd がありません。
\n"; } unless (-x $mailcmd) { print "$mailcmd が実行可能ではありません。
\n"; } unless (-f "jcode.pl") { print "jcode.pl がありません。
\n"; } unless (-f "mimew.pl") { print "mimew.pl がありません。
\n"; } print "\n"; print "\n"; exit 0; } #==================================================================== # 本体 #==================================================================== # # ライブラリの呼び出し # require "jcode.pl"; require "mimew.pl"; # # 入力値を読み取る # if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); @a = split(/&/, $query_string); foreach $x (@a) { ($name, $value) = split(/=/, $x); $name =~ tr/+/ /; $name =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; &jcode'convert(*name, "jis"); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $value =~ s/[\r\n]+/\n/g; &jcode'convert(*value, "jis"); if ($FORM{$name} eq "") { $FORM{$name} = $value; $FORM[$cnt++] = $name; } else { $FORM{$name} .= (" " . $value); } } } # # EMAILが正常なメールアドレスかどうか判断する # if ($FORM{'EMAIL'} =~ /^[-_\.a-zA-Z0-9]+\@[-_\.a-zA-Z0-9]+$/) { $mailfrom = $FORM{'EMAIL'}; } # # メールヘッダを作成する # { &jcode'convert(*subject, "jis"); $mailhead = ""; $mailhead .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n"; $mailhead .= "Content-Transfer-Encoding: 7bit\n"; $mailhead .= "MIME-Version: 1.0\n"; $mailhead .= "To: $mailto\n"; if ($mailfrom) { $mailhead .= "From: $FORM{'EMAIL'}\n"; $mailhead .= "Cc: $FORM{'EMAIL'}\n"; } else { $mailhead .= "From: $mailto\n"; } $mailhead .= "Subject: $subject\n"; $mailhead .= "\n"; } # # メールボディを作成する # { for ($i = 0; $i < $cnt; $i++) { $mailbody .= "$FORM[$i] = $FORM{$FORM[$i]}\n"; } # "." のみの行は ". " に変換する。 # 2回繰り返さないと、2行連続で "." のみの行に対応できない # "." を ".." に変換する処理が一般的だそうだが、あえて、 # "." を ". " に変換する。 $mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g; $mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g; } # # メールを送信する # if ($mailcmd =~ /sendmail/) { unless (open(OUT, "| $mailcmd -t")) { &errexit("メールの送信に失敗しました。(1)"); } unless (print OUT &mimeencode($mailhead)) { &errexit("メールの送信に失敗しました。(2)"); } unless (print OUT $mailbody) { &errexit("メールの送信に失敗しました。(3)"); } close(OUT); } elsif ($mailcmd =~ /BLAT/i) { &jcode'convert(*subject, "sjis"); $cmd = "$mailcmd"; $cmd .= " -"; $cmd .= " -t $mailto"; $cmd .= " -s \"$subject\""; if ($mailfrom) { $cmd .= " -c $mailfrom"; $cmd .= " -f $mailfrom"; } unless (open(OUT, "| $cmd > NUL:")) { &errexit("メールの送信に失敗しました。(4)"); } &jcode'convert(*mailbody, "sjis"); unless (print OUT $mailbody) { &errexit("メールの送信に失敗しました。(5)"); } &jcode'convert(*mailbody, "jis"); close(OUT); } else { &errexit("メール送信コマンド $mailcmd が存在しません。"); } # # ブラウザ画面に送信結果を書き出す # { &jcode'convert(*header, "euc"); &jcode'convert(*footer, "euc"); # $mail = $mailhead . $mailbody; $mail = "Subject: $subject\n\n".$mailbody; &jcode'convert(*mail, "euc"); $mail =~ s/&/&/g; $mail =~ s/"/"/g; $mail =~ s/</g; $mail =~ s/>/>/g; $mail =~ s/\n/$err
\n"; $msg .= "ブラウザの [戻る] ボタンで戻ってください。
\n"; $msg .= "