#!/usr/bin/perl # ↑あなたが加入しているプロバイダの「perl」言語が使用できる # パスを指定します。一般的に「#!/usr/local/bin/perl」で大丈夫 # 何度トライしてもサーバーエラーが出る場合は「perl5」にしてみる #======================================================================================= # mailmagazine.cgi ver2001 by Terra #======================================================================================= #日本語コード変換モジュールのパス #このスクリプトと同じディレクトリにあればこのままで良し require 'jcode.pl'; #--------------------------------------- #メールサーバーのsendmailのアドレスを指定 $sendmail = '/usr/sbin/sendmail'; #--------------------------------------- #あなたのホームページのアドレス $homepage = 'http://loan.1192.tv/'; #--------------------------------------- #管理者(あなた)のメールアドレス $masteremail = 'info@loan.1192.tv'; #--------------------------------------- #タイトル画像 $title1_img = 'mailmagazine.gif'; #i-Mode用タイトル画像 $title2_img = 'magazine.gif'; #--------------------------------------- #メンバーを格納するデータベースファイル #個人情報の漏洩を防ぐ為必ず変更する事 $datafile = 'mailmagazine.dat'; $mailfile = 'thanksmail.dat'; #--------------------------------------- #管理者パスワード #個人情報の漏洩を防ぐ為必ず変更する事 $password = 'st0492'; #--------------------------------------- #ページの名前 $title = 'メールマガジン'; #--------------------------------------- #時差の設定 時間単位 日本時間では「9」 # マイナス6時間の場合は -6 $timelag = 9; #--------------------------------------- #バックグランドカラー $bg_color = '#FFFFFF'; #テキストの文字色 $text_color = '#000000'; #リンク文字色 $link_color = '#888800'; #Vリンク文字色 $vlink_color = '#880088'; #--------------------------------------- #趣味の選択肢 #むやみに増やすとi-Modeで受信できない @HOBBY = ( '釣り','映画','音楽','ボーリング','水泳','旅行','料理/グルメ','ビリヤード','語学', '書道','お茶','短歌・俳句','お花','読書','盆栽','サッカー','野球','ゴルフ', 'テニス','カラオケ','ショッピング','パソコン','車','バイク','競輪/競馬/競艇', 'インターネット','ウィンタースポーツ','パチンコ','その他' ); #--------------------------------------- #エリアの選択肢 #むやみに増やすとi-Modeで受信できない @AREA = ( '北海道','東北','関東','信越','北陸','東海', '近畿','中国','四国','九州','沖縄県' ); #--------------------------------------- #抽出時年齢層の選択肢 $AGE[0] = '0-12=12才以下'; $AGE[1] = '13-15=13才〜15才以下'; $AGE[2] = '16-18=16才〜18才以下'; $AGE[3] = '19-20=19才〜20才以下'; $AGE[4] = '21-22=21才〜22才以下'; $AGE[5] = '23-25=23才〜25才以下'; $AGE[6] = '26-30=26才〜30才以下'; $AGE[7] = '31-35=31才〜35才以下'; $AGE[8] = '36-40=36才〜40才以下'; $AGE[9] = '41-50=41才〜50才以下'; $AGE[10] = '51-60=51才〜60才以下'; $AGE[11] = '61-70=61才〜70才以下'; $AGE[12] = '71-=71才以上'; #======================================================================================= # 初期設定が必要なのはここまでです。 #======================================================================================= #本CGIが稼働しているフルパスを取得 $scriptaddr = "http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}"; #時刻を世界標準時に設定 $ENV{'TZ'} = "GMT"; #時差をプラスして現在の日付と時刻のシリアル値を取得 $DATE = time + ($timelag * 3600); #ブラウザを取得 #携帯からのアクセスとPCからのアクセスで処理を分岐する為 $useragent = $ENV{'HTTP_USER_AGENT'}; $useragent =~ s//>/g; if ($useragent =~ /docomo/i) { $imode = 1; } else { $imode = 0; } #ホストを取得 $hostaddr = &domain_name; #フォームからのデータを取得 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'}); } else { $QUERY_DATA = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$QUERY_DATA); foreach $pair (@pairs) { ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s//>/g; $value =~ s/\n//g; $value =~ s/\,/,/g; $value =~ s/\t/  /g; &jcode'convert(*value,'sjis'); $QUERY{$key} = $value; } #クッキー取得 $name = ''; $email = ''; $url = ''; $pwd = ''; $area = ''; $icon = ''; &get_cookie; if ($QUERY{'pw'} eq $password && !$imode) { #=============================================================================== # 管理者専用モード # i-Modeからはアクセスできない #------------------------------------------------------------------------------- &data_read; if ($QUERY{'button'} eq '検索結果一覧') { $QUERY{'action'} = 'view'; } if ($QUERY{'button'} eq '会員削除') { #=============================================================================== # 会員一覧モードからの削除処理 #------------------------------------------------------------------------------- &delete($QUERY{'delmail'}); $QUERY{'action'} = ''; } if ($QUERY{'action'} eq 'find') { #======================================================================= # 送信先を検索して設定内容を確認 #----------------------------------------------------------------------- &find; $count = @MATCH; if ($count < 1) { &error(bad_find); } &html_head($imode); print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
検索結果[$count]名に送信されます。
\n"; print "\n"; if ($QUERY{'imode'}) { print "\n"; print "\n"; } if ($QUERY{'sex'}) { print "\n"; print "\n"; } if ($QUERY{'birthday'}) { print "\n"; print "\n"; } if ($QUERY{'age'}) { ($age, $str) = split(/=/, $AGE[$QUERY{'age'}]); print "\n"; print "\n"; } if ($QUERY{'area'}) { print "\n"; print "\n"; } if ($QUERY{'hobby'}) { print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; $news = $QUERY{'news'}; $news =~ s/\r/
/g; print "\n"; print "
E-Maili-Mode利用者
性別$QUERY{'sex'}
生年月日$QUERY{'month'}月$QUERY{'day'}日生
年齢$str
住所$QUERY{'area'}
趣味$QUERY{'hobby'}
件名$QUERY{'subject'}
ニュース$news
\n"; print "
"; if ($QUERY{'news'}) { print "\n"; } print "
\n"; print "
\n"; print "
\n"; print "\n"; exit; } elsif ($QUERY{'action'} eq 'sendmail') { #======================================================================= # 送信先、内容が確認済ならメールを送信 #----------------------------------------------------------------------- !$QUERY{'subject'} && &error(bad_subject); &find; foreach $line (@MATCH) { @LINE = split(/\t/,$line); foreach (@LINE) { ($key, $value) = split(/=/,$_); $FIELD{$key} = $value; } if ($bcc) { $bcc .= ",$FIELD{'email'}"; } else { $bcc = $FIELD{'email'}; } } $news = $QUERY{'news'}; $news =~ s/\r/\n/g; $news = "$title\n" . "----------------\n" . $news . "\n----------------"; $subject = $QUERY{'subject'}; &jcode'convert(*subject,'jis'); &jcode'convert(*news,'jis'); if ($sendmail) { if (&send_email($sendmail, '',$subject, $masteremail, $masteremail, '', $bcc, $news, '', '')) { &error(send_mail); } } &html_head($imode); $msg = "正常に送信しました。
"; print "
\n"; print "

 

\n"; print "
\n"; print "
\n"; print "

 

\n"; print "

$msg

\n"; print "

 

\n"; print "
\n"; print "
\n"; print "HomePage\n"; print "
\n"; print "\n"; exit; &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); } elsif ($QUERY{'action'} eq 'view') { #======================================================================= # 送信先一覧の表示 #----------------------------------------------------------------------- &find; if ($QUERY{'pline'} eq '') { $pline = 0; } else { $pline = $QUERY{'pline'}; } $end_data = @MATCH - 1; $page_end = $pline + 29; if ($page_end >= $end_data) { $page_end = $end_data; } &html_head($imode); print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
現在",$pline + 1, "番から", $page_end + 1, "番迄を表\示しています。
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; foreach ($pline .. $page_end) { @LINE = split(/\t/,$MATCH[$_]); foreach (@LINE) { ($key, $value) = split(/=/,$_); $FIELD{$key} = $value; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "
NameE-MailSexAreaHobbyAge
$FIELD{'name'}$FIELD{'email'}$FIELD{'sex'}$FIELD{'area'}$FIELD{'hobby'}", &age($FIELD{'year'}, $FIELD{'month'}, $FIELD{'day'}), "
\n"; print "
\n"; $next_line = $page_end + 1; if ($page_end != $end_data) { print "\n"; print "\n"; } print "\n"; print "
\n"; print "
\n"; print "\n"; exit; } #=============================================================================== # ニュース送信先条件設定フォームの生成 #------------------------------------------------------------------------------- $count = @DATA; &html_head($imode); print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
    \n"; print "
  1. メールを送信する会員の条件を選択してください。
  2. \n"; print "
  3. [抽出]ボタンを押すと送信される会員数を表\示します。
  4. \n"; print "
  5. 現在$count名の方が登録されています。
  6. \n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
E-Maili-Mode利用者
性別\n"; print "指定しない\n"; print " 男性\n"; print " 女性
生年月日生年月日を指定する
\n"; print "月\n"; print "日生
年齢
住所
趣味
件名
ニュース
\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; exit; } if ($QUERY{'action'} eq 'regist') { #=============================================================================== # 会員データの保存 #------------------------------------------------------------------------------- &data_read; $value = join("\t", "date=$DATE", "name=$QUERY{'name'}", "email=$QUERY{'email'}", "imode=$QUERY{'imode'}", "sex=$QUERY{'sex'}", "year=$QUERY{'year'}", "month=$QUERY{'month'}", "day=$QUERY{'day'}", "area=$QUERY{'area'}", "hobby=$QUERY{'hobby'}", "\n" ); unshift(@DATA, $value); if (&data_save != 1) { &error(bad_save); } &mail_read; $news = ''; foreach $line (@MAIL_DATA) { $news .= $line; } $subject = "登録ありがとうございました【ローン比較大辞典】"; &jcode'convert(*subject,'jis'); &jcode'convert(*news,'jis'); # if ($sendmail) { # if (&send_email($sendmail, '',$subject, $masteremail, $QUERY{'email'}, '', $masteremail, $news, '', '')) { &error(send_mail); } # } $email = $QUERY{'email'}; &set_cookie; &html_head($imode); $msg = "ローンシュミレーションを楽しみください。"; if ($imode) { #======================================================================= # i-Mode用メッセージ表示 #----------------------------------------------------------------------- print $msg; } else { #======================================================================= # ブラウザ用メッセージ表示 #----------------------------------------------------------------------- print "
\n"; print "
\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; print ""; print""; print""; print "
\n"; print "

\n"; print "
\n"; print "

月々返済できる金額から、いくらまで借りられるかを調べられます

\n"; print "
\n"; print "

\n"; print "
\n"; print "

借りる金額から、月々いくら返済するかを調べられます

\n"; print "
\n"; print "

\n"; print "
\n"; print "現在ご返済中のローンを借り換えた場合、毎月返済額、年間返済額、総返済額がいくら軽減できるかがわかります\n"; print "
\n"; print "\n"; print""; print "
\n"; print "

登録解除

\n"; print "
\n"; print "
\n"; print "
\n"; } print "\n"; exit; } elsif ($QUERY{'action'} eq 'confirmation') { #=============================================================================== # 登録データ確認フォームの生成 #------------------------------------------------------------------------------- &data_read; !($QUERY{'email'} =~ /.+\@.+\..+/) && &error(bad_email); @DUMMY = grep(/$QUERY{'email'}/, @DATA); if ($QUERY{'mode'} eq 'delte') { #======================================================================= # 押されたボタンが[退会]場合の処理 #----------------------------------------------------------------------- if (@DUMMY < 1) { &error(bad_del); } &delete($QUERY{'email'}); &del_cookie; &html_head($imode); $msg = "ありがとうございました。正常に削除しました。
"; $msg .= "またの機会を御待ちしています。"; if ($imode) { #=============================================================== # i-Mode用メッセージ表示 #--------------------------------------------------------------- print $msg; } else { #=============================================================== # ブラウザ用メッセージ表示 #--------------------------------------------------------------- print "
\n"; print "
\n"; print "

 

\n"; print "

$msg

\n"; print "\n"; print "

 

\n"; print "
\n"; print "
\n"; } print "\n"; exit; } if (@DUMMY > 0) { &error(double_post); } &html_head($imode); print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($imode) { #=============================================================== # i-Mode確認フォーム #--------------------------------------------------------------- print "E-Mail:
$QUERY{'email'}
\n"; print "\n"; } else { #=============================================================== # ブラウザ用確認フォーム #--------------------------------------------------------------- print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "
E-Mail$QUERY{'email'}\n"; print "
\n"; print "
\n"; print "
\n"; } print "
\n"; print "\n"; exit; } #======================================================================================= # メンバー登録フォームの生成 #--------------------------------------------------------------------------------------- &data_read; @DUMMY = grep(/$email/, @DATA); &html_head($imode); if ($email && @DUMMY) { print "
\n"; print "\n"; print "\n"; print "\n"; $msg = "ローンシュミレーションを楽しみください。"; if ($imode) { #======================================================================= # i-Mode用メッセージ表示 #----------------------------------------------------------------------- print $msg; } else { #======================================================================= # ブラウザ用メッセージ表示 #----------------------------------------------------------------------- print "
\n"; print "
\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; print ""; print""; print""; print "
\n"; print "

\n"; print "
\n"; print "

月々返済できる金額から、いくらまで借りられるかを調べられます

\n"; print "
\n"; print "

\n"; print "
\n"; print "

借りる金額から、月々いくら返済するかを調べられます

\n"; print "
\n"; print "

\n"; print "
\n"; print "現在ご返済中のローンを借り換えた場合、毎月返済額、年間返済額、総返済額がいくら軽減できるかがわかります\n"; print "
\n"; print "\n"; print""; print "
\n"; print "

登録解除

\n"; print "
\n"; print "
\n"; print "
\n"; } print "
\n"; print "\n"; exit; } else { print "
\n"; # print "\n"; print "\n"; if ($imode) { #======================================================================= # i-Mode用登録フォーム #----------------------------------------------------------------------- print "\n"; print "\n"; print "E-Mail:

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } else { #======================================================================= # ブラウザ用登録フォーム #----------------------------------------------------------------------- print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
E-Mail
\n"; print "
\n"; print "
\n"; print "
\n"; } print "
\n"; print "\n"; exit; } #======================================================================================= # HTMLのヘッダーを宣言 #--------------------------------------------------------------------------------------- sub html_head { my($flag) = $_[0]; #i-Modeの場合はのみ、ブラウザの場合はカラーの設定をする if ($flag) { print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "$title\n"; print "\n"; } else { print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "$title\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } } #======================================================================================= # 抽出 #--------------------------------------------------------------------------------------- sub find { my($match); my($range, $str, $start, $end, $age); foreach $line (@DATA) { @LINE = split(/\t/,$line); foreach (@LINE) { ($key, $value) = split(/=/,$_); $FIELD{$key} = $value; } $match = 1; if ($QUERY{'imode'} && $QUERY{'imode'} ne $FIELD{'imode'}) { $match = 0; }; if ($QUERY{'sex'} && $QUERY{'sex'} ne $FIELD{'sex'}) { $match = 0; }; if ($QUERY{'birthday'}) { if ($QUERY{'month'} != $FIELD{'month'}) { $match = 0; } if ($QUERY{'day'} != $FIELD{'day'}) { $match = 0; } } if ($QUERY{'age'} ne '') { ($range, $str) = split(/=/, $AGE[$QUERY{'age'}]); ($start, $end) = split(/\-/, $range); $age = &age($FIELD{'year'}, $FIELD{'month'}, $FIELD{'day'}); if ($age < $start || $age > $end) { $match = 0; } } if ($QUERY{'area'} && $QUERY{'area'} ne $FIELD{'area'}) { $match = 0; }; if ($QUERY{'hobby'} && $QUERY{'hobby'} ne $FIELD{'hobby'}) { $match = 0; }; if ($match) { push(@MATCH, $line); } } } #======================================================================================= # 削除 #--------------------------------------------------------------------------------------- sub delete { my($email) = $_[0]; my($i) = 0; foreach $line (@DATA) { @LINE = split(/\t/,$line); foreach (@LINE) { ($key, $value) = split(/=/,$_); $FIELD{$key} = $value; } if ($email eq $FIELD{'email'}) { splice(@DATA, $i, 1); last; } $i++; } if (&data_save != 1) { &error(bad_save); } } #======================================================================================= # 年齢の計算 #--------------------------------------------------------------------------------------- sub age { my($year, $month, $day) = @_; my(@DATE) = localtime(time + $timelag * 3600); $DATE[5] += 1900; $DATE[4]++; my($tosi) = $DATE[5] - $year; if ($DATE[4] < $month) { $tosi--; } else { if ($DATE[4] == $month && $DATE[3] < $day) { $tosi--; } } $tosi; } #======================================================================================= # 日付時刻のシリアル値を文字列に変換 #--------------------------------------------------------------------------------------- sub jst_time { my(@DATE) = localtime($_[0]); $DATE[5] += 1900; $DATE[4]++; $DATE[6] = ('日','月','火','水','木','金','土') [$DATE[6]]; $_ = "$DATE[5]年$DATE[4]月$DATE[3]日($DATE[6]) $DATE[2]:$DATE[1]"; } #======================================================================================= # データの読み込み #--------------------------------------------------------------------------------------- sub data_read { if (open(DAT,"$datafile")) { @DATA = ; close(DAT); } } #======================================================================================= # ロックつきデータ書き込みルーチン #--------------------------------------------------------------------------------------- sub data_save { $datafile =~ /(.+)\..+$/; my($filename) = $1; if ($filename !~ /.+/) { &error(bad_filename); } my($tmpfile) = "$filename.tmp"; my($tmpflag) = 0; foreach (1 .. 10) { unless (-f $tmpfile) { $tmpflag = 1; last; } sleep(1); } if ($tmpflag == 1) { $tmp_dummy = "$$\.tmp"; if (!open(TMP,">$tmp_dummy")) { &error(bad_tmpfile); } close(TMP); chmod 0666,$tmp_dummy; if (!open(TMP,">$tmp_dummy")) { &error(bad_tmpfile); } print TMP @DATA; close(TMP); foreach (1 .. 10) { unless (-f $tmpfile) { if (!open(TMP,">$tmpfile")) { &error(bad_tmpfile); } close(TMP); rename($tmp_dummy,$datafile); unlink $tmpfile; $tmpflag = 1; last; } $tmpflag = 0; sleep(1); } } $tmpflag; } #======================================================================================= # ホストの取得 #--------------------------------------------------------------------------------------- sub domain_name { local($addr) = $ENV{'REMOTE_ADDR'}; local($_) = gethostbyaddr(pack("C4",split(/\./,$addr)),2); if ($_ eq '') { $_ = $addr; } $_; } #======================================================================================= # メール送信関数 #--------------------------------------------------------------------------------------- sub send_email { my($sendmailpath, $uuencodepath, $subject, $from, $to, $cc, $bcc, $body, $files, $encoding, $separator) = @_; my($mimeid, $err, $name, $status, $message) = ''; my(@ATTACH_FILES, @ENCODING, @ENCODE_DATA) = (); my(@TO) = split(/\,/, $to); my(@CC) = split(/\,/, $cc); my(@BCC) = split(/\,/,$bcc); my(@attach_files) = split(/\,/, $files); my(@encoding) = split(/\,/, $encoding); my($i, $filename, $tmpfile); my($CR) = "\015\012"; !$separator && ($separator = ','); my($mailto) = ''; foreach (@TO) { if (/([\w\-\.]+\@[\w\-\.]+)/) { if ($mailto) { $mailto .= "$separator$1"; } else { $mailto = $1; } } } if ($mailto eq '') { return(1); } $cc = ''; foreach (@CC) { if (/([\w\-\.]+\@[\w\-\.]+)/) { if ($cc) { $cc .= "$separator$1"; } else { $cc = $1; } } } $bcc = ''; foreach (@BCC) { if (/([\w\-\.]+\@[\w\-\.]+)/) { if ($bcc) { $bcc .= "$separator$1"; } else { $bcc = $1; } } } if (!$mailto) { return('Err NotMailAddress'); } if ($sendmailpath =~ /blatj/i) { $tmpfile = "$$\.tmp"; if (open(TMP,">$tmpfile")) { print TMP $body; close(TMP); } else { return('bad New TemporaryFile'); } if ($cc) { $cc = " -c $cc"; } if ($bcc) { $bcc = " -b $bcc"; } $files =~ s/\//\\/g; if (-f $files && $encoding eq 'text') { $attach = " -attacht $files"; } if (-f $files && $encoding eq 'base64') { $attach = " -base64 -attach $files"; } if (-f $files && $encoding eq 'uuencode') { $attach = " -uuencode -attach $files"; } if (-f $files && $encoding eq 'mime') { $attach = " -mime -attach \"$files\""; } if (open(MAIL,"| $sendmailpath $tmpfile -s \"$subject\" -f $from -t $mailto$cc$bcc$attach -q")) { close(MAIL); } else { $err = 'Error Open sendmail Failure'; } unlink $tmpfile; } else { for ($i = 0; $i < @attach_files; ++$i) { if (!(-e $attach_files[$i])) { $err = "$attach_files[$i] does not exist."; return($err); } push(@ATTACH_FILES, $attach_files[$i]); push(@ENCODING, $encoding[$i]); } if ($encoding =~ /mime/i) { $mimeid = 'Try_The_Home_Page_-' . time; } if (open(MAIL,"| $sendmailpath -t")) { binmode MAIL; print MAIL "From: $from$CR"; print MAIL "To: $mailto$CR"; print MAIL "Cc: $cc$CR" if $cc; print MAIL "Bcc: $bcc$CR" if $bcc; print MAIL "Subject: $subject$CR"; if ($mimeid) { print MAIL "x-sender: $from$CR"; print MAIL "x-mailer: perl-lib$CR"; print MAIL "Mime-Version: 1.0$CR"; print MAIL "Content-Type: multipart/mixed; boundary=\"$mimeid\"$CR"; print MAIL "--$mimeid$CR"; print MAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"$CR$CR"; #print MAIL "Content-transfer-encoding: quoted-printable$CR$CR"; } else { print MAIL $CR; } print MAIL $body; print MAIL $CR; for ($i = 0; $i < @ATTACH_FILES; ++$i) { $attach_file = $ATTACH_FILES[$i]; $encoding = $ENCODING[$i]; $attach_file =~ /[\\\/:]([^\\\/:]+)$/g; $filename = $1; if (-e $attach_file) { if ($encoding eq 'text') { if (open(TEXT, $attach_file)) { print MAIL "Attachment:\t$filename\n"; print MAIL "Encoding:\tNone\n\n"; while () { s/^\.([\n\r\f]+)/..$1/; print MAIL } close(TEXT); print MAIL "\n\n"; } } elsif ($encoding eq 'uuencode') { print MAIL "Attachment:\t$filename$CR"; print MAIL "Encoding:\tUUEncoded$CR"; if ($uuencodepath && -e $uuencodepath) { if (open(FIL,"$uuencodepath $attach_file $filename |")) { @ENCODE_DATA = ; close(FIL); print MAIL @ENCODE_DATA; } else { $err = 'Error Not Open uuencode'; } } else { $encode_data = &changeuuencode($attach_file); print MAIL "begin 644 $filename\n"; print MAIL $encode_data; print MAIL "`\nend\n\n"; } } elsif ($encoding eq 'mime') { print MAIL "--$mimeid$CR"; if (-T $attach_file) { print MAIL "Content-type: text/plain; charset=iso-2022-jp; name=\"$filename\"$CR"; } else { if ($filename =~ /\.jpg/i || $filename =~ /\.jpeg/i) { print MAIL "Content-type: image/jpeg; name=\"$filename\"$CR"; } elsif ($filename =~ /\.gif/i) { print MAIL "Content-type: image/gif; name=\"$filename\"$CR"; } elsif ($filename =~ /\.png/i) { print MAIL "Content-type: image/png; name=\"$filename\"$CR"; } else { print MAIL "Content-type: application/octet-stream; name=\"$filename\"$CR"; } } print MAIL "Content-transfer-encoding: base64$CR$CR"; $encode_data = &changebase64($attach_file); print MAIL "$encode_data$CR"; } } } if ($mimeid) { print MAIL "--$mimeid--$CR" } print MAIL "$CR.$CR"; close(MAIL); } else { $err = 'Error Open sendmail Failure'; } } $err; } #======================================================================================= # エラー処理ルーチン #--------------------------------------------------------------------------------------- sub error { $error = $_[0]; if ($error eq 'bad_pr') { $msg = 'あなたのPRを記入してください。'; } elsif ($error eq 'bad_name') { $msg = 'ニックネームが記入されていません。'; } elsif ($error eq 'bad_email') { $msg = 'メールアドレスが不正です。'; } elsif ($error eq 'bad_age') { $msg = '生年月日が不正です。
全角数値で記入していませんか?'; } elsif ($error eq 'bad_del') { $msg = '削除するメールアドレスが見つかりません。'; } elsif ($error eq 'bad_find') { $msg = '指定の条件で送信先が見つかりません。'; } elsif ($error eq 'bad_subject') { $msg = '件名を省略することはできません。'; } elsif ($error eq 'double_post') { $msg = 'あなたのデータはすでに登録されています。'; } elsif ($error eq 'send_mail') { $msg = 'sendmailをオープンできません。'; } else { $msg = '原因不明のエラーで処理を継続できません。'; } &html_head($imode); if ($imode) { #======================================================================= # i-Mode用メッセージ表示 #----------------------------------------------------------------------- print $msg; } else { #======================================================================= # ブラウザ用メッセージ表示 #----------------------------------------------------------------------- print "
\n"; print "
\n"; print "

 

ERROR\n"; print "

$msg

\n"; print "\n"; print "

 

\n"; print "
\n"; print "
\n"; } print "\n"; exit; } ## --- クッキーの発行 sub set_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg) = gmtime(time + 365*24*60*60); @mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @week = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); $date_g = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT", $week[$wdayg],$mdayg,$mons[$mong],$yearg+1900,$hourg,$ming,$secg); $cook="name\:$name\,email\:$email\,url\:$url\,pwd\:$pwd\,area\:$area\,icon\:$icon"; print "Set-Cookie: LOANSIM=$cook; expires=$date_g\n"; } ## --- クッキーを取得 sub get_cookie { # クッキーを取得 $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'LOANSIM'}); foreach $pair (@pairs) { ($name, $value) = split(/\:/, $pair); $COOKIE{$name} = $value; } $name = $COOKIE{'name'}; $email = $COOKIE{'email'}; $url = $COOKIE{'url'}; $pwd = $COOKIE{'pwd'}; $area = $COOKIE{'area'}; $icon = $COOKIE{'icon'}; } ## --- クッキーの削除 sub del_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg) = localtime(time-1); @mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @week = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); $date_g = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT", $week[$wdayg],$mdayg,$mons[$mong],$yearg+1900,$hourg,$ming,$secg); print "Set-Cookie: LOANSIM=''; expires=$date_g\n"; } #======================================================================================= # 登録完了メールデータの読み込み #--------------------------------------------------------------------------------------- sub mail_read { if (open(MAIL_FILE,"$mailfile")) { @MAIL_DATA = ; close(MAIL_FILE); } }