#!/usr/local/bin/perl ############################################################ # SUBJECT : メール配信 ControlMain # # NAME : formtomail.cgi # # INPUT : # # OUTPUT : # # CREATED : 2001.09.20 TRAM NAS # # UPDATED : 2001.09.26 TRAM SHINGU # # 1.プログラム名をFormMail.cgi -> formtomail.cgiに# # 変更 # # 2.変数名をマニュアルの記述通りに変更 # # 3.key=valueで本文を構成する仕様に変更 # # UPDATED : 2001.10.13 TRAM SHINGU # # 1.パラメータでのメール送信元(from)を無視して # # ハードコード内容($MAIL_ADDRESS_FROM)を優先す # # する仕様に変更。 # ############################################################ ##### 定数定義 ##### # Windowsフラグ(0: Not Windows 1: Windows) $IS_WINDOWS = 0; # 共通ライブラリのパス $COMMON_LIBRARY_PATH = "/usr/local/apache/cgi-bin"; # 配信先アドレスのパラメータ名 # MOD START 2001.09.25 TramOnline Shingu #$MAIL_HEADER_TO = "mailto"; $MAIL_HEADER_TO = "sendto"; # MOD END 2001.09.25 TramOnline Shingu # 配信元アドレスのパラメータ名 $MAIL_HEADER_FROM = "from"; # メール・アドレスのパラメータ名 # MOD START 2001.09.26 TramOnline Shingu #$MAIL_HEADER_SUBJECT = "subject"; $MAIL_HEADER_SUBJECT = "title"; # MOD END 2001.09.26 TramOnline Shingu # 配信後の戻りURLのパラメータ名 $RETURN_URL = "return"; # この定数は顧客の環境に合わせて変更する # 配信元アドレス $MAIL_ADDRESS_FROM = "wel00\@wellness-k.com"; ##### 初期処理 ##### # カレントディレクトリの移動(Windowsのみ) if ($IS_WINDOWS) { $0 =~ /[^\\\/]*$/; chdir $`; } # サブルーチンのCALL require "$COMMON_LIBRARY_PATH/DataCheckMailAddress.pl"; require "$COMMON_LIBRARY_PATH/jcode.pl"; require "$COMMON_LIBRARY_PATH/SendMail.pl"; # パラメータ取得 # URLの?より後の文字列を$paramにセットする if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $param, $ENV{'CONTENT_LENGTH'}); } else { $param = $ENV{'QUERY_STRING'}; } # name=value のペアを%paramにセットする @pairs = split(/&/,$param); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # シフトJISコードにエンコード jcode::convert(\$value, "sjis"); $value =~ s/\n//g; # 同じ名前のパラメータをカンマ区切りで連結して連想配列にセット $param{$name} .= "$value,"; } # 末尾のスラッシュを削除 foreach (keys %param) { chop($param{$_}); } # ADD START 2001.10.13 TRAM SHINGU # パラメータの値に無関係にハードコード内容を優先する $param{from} = $MAIL_ADDRESS_FROM; # ADD END 2001.10.13 TRAM SHINGU # ステータス・コードをエラーにセット $status = 1; ###### メイン・ロジック ##### # 処理用workエリアの宣言 my ($ret, %mail, $wkData, $errMsg, $wkReturn); # 配信先のチェック $ret = DataCheckMailAddress($param{sendto}); if (!$ret) { # D/C OK! # メール配信データの編集 foreach (sort keys %param) { if ($_ eq $MAIL_HEADER_TO) { $mail{mailto} = $param{sendto}; } elsif ($_ eq $MAIL_HEADER_FROM) { $mail{from} = $param{from}; } elsif ($_ eq $MAIL_HEADER_SUBJECT) { $mail{subject} = $param{title}; } elsif ($_ eq $RETURN_URL) { } else { # MOD START 2001.09.26 TramOnline Shingu #$wkData .= "$param{$_}\n"; $wkData .= "$_=$param{$_}\n"; # MOD END 2001.09.26 TramOnline Shingu } } $mail{data} = $wkData; # メール配信を実行 $ret = SendMail(%mail); if (!$ret) { # 正常終了ページを表示 $status = DisplayEndPage($param{thankyou}); } } else { # D/C ERROR! $errMsg = GetErrorMsg($ret); $status = DisplayErrPage($errMsg); } ##### 終了処理 ##### if (0 == $status) { # 正常終了 exit; } else { # エラー発生 DisplaySystemErrPage(); exit; } ##### サブルーチン ##### # エラー・メッセージを表示 # usage : GetErrorMsg($ret) sub GetErrorMsg { my ($errCode) = @_; my ($errMsg); if ($errCode == -1) { $errMsg = "送信先のアドレスが未入力です。"; } elsif ($errCode == -2) { $errMsg = "送信先のアドレスに全角文字が含まれています。"; } elsif ($errCode == -3) { $errMsg = "送信先のアドレスに空白文字が含まれています。"; } elsif ($errCode == -4) { $errMsg = "送信先のアドレスが間違っています。"; } # 戻り値の編集 $errMsg; } # 正常終了のページを表示 # usage : $status = DisplayEndPage($param{return}) sub DisplayEndPage { my ($return) = @_; print "content-type: text/html\n\n"; print qq(
メールをお預かりいたしました。
); # 戻り値 0; } # D/Cエラーのページを表示 # usage : $status = DisplayErrPage($errMsg) sub DisplayErrPage { my ($errMsg) = @_; print "content-type: text/html\n\n"; print qq($errMsg
再設定してください。
); # 戻り値 0; } # システムエラーのページを表示 # usage : DisplaySystemErrPage() sub DisplaySystemErrPage { print "content-type: text/html\n\n"; print qq(システム・エラーが発生しました
ページが\表\示できません
); }