#┌───────────────────────────────── #│ JOYFUL NOTE v1.8 (2004/01/21) #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── #┌───────────────────────────────── #│Powered by Kent Lab #|[KentLab:KL00040] #│http://kent-Lab.com/ #└───────────────────────────────── # ライブラリ取り込み require './mimew.pl'; require './jcode.pl'; # タイトル $title = "農機売買MM"; # タイトルサイズ $t_size = '22px'; # タイトルの色 $t_color = "#BB0000"; # タイトル画像を使う場合 $t_gif = ""; # タイトル画像のサイズ $t_gif_w = 185; # 横サイズ $t_gif_h = 32; # 縦サイズ # スクリプト # → 必ず http://から記述してください #$magascript = 'http://nao.cside.jp/~kentlab/joyful/joyful.cgi'; $magascript = 'http://kikaiya.agrijp.com/joyful/agrim.cgi'; # 本文文字サイズ $b_size = '13px'; # fork関数の使用 (0=no 1=yes) # → メール配信の終了を待たずに書込を完了(大量配信に便利) # → 使用できないプロバイダ(サーバ)があるため確認必要 $fork = 1; # 管理者メールアドレス $master = 'mail@agrijp.com'; # ブラウザのキャッシュ取込を拒否 (0=no 1=yes) $nocashe = 0; # 色 (1) : 題名部の下地の色 $color1 = "#5E5E5E"; # 色 (2) : 題名部の ■ の色 $color2 = "#FFFF00"; # 色 (3) : 題名部の文字色 $color3 = "#FFFFFF"; # bodyタグ $body = ''; # サブメッセージ $sub_message = <<'EOM'; EOM #--------------------------# # メール登録・解除画面 # #--------------------------# sub member { local($no)=0; open(IN,"$memfile") || &error("Open Error : $memfile"); ++$no while (); close(IN); &header; if ($bg) { print "\n"; } else { print "\n"; } print <<"HTML"; [戻る]
メールアドレス登録

講読の登録・解除・変更

▼新着投稿メールマガジンの「登録」

HTML # 登録件数をチェック if ($no >= $mem_max) { print "- 現在メールアドレスの登録はできません -\n"; } else { print "\n"; print "
\n"; print "カテゴリー別配信ができます
\n"; print "
\n"; print "出品地区(複数選択可)\n"; print "\n"; print "
\n"; open(IN,"$catedat2") || &error("Open Error : $catedat2"); @buf = ; close(IN); $ccnt=0; foreach $citem (@buf) { $citem =~ s/\r\n//; if ($citem eq "選択") { $ccnt++; next; } if (($ccnt!=0)and(($ccnt % 8)==0)) { print "
\n"; } print "$citem\n"; $ccnt++; } print " \n"; print "
\n"; print "
カテゴリ(複数選択可)\n"; print "\n"; print "
\n"; open(IN,"$catedat1") || &error("Open Error : $catedat1"); @buf = ; close(IN); $ccnt=0; foreach $citem (@buf) { $citem =~ s/\r\n//; if ($citem eq "選択") { $ccnt++; next; } if (($ccnt!=0)and(($ccnt % 8)==0)) { print "
\n"; } print "$citem\n"; $ccnt++; } print "
\n"; print "\n"; print "
メールアドレス(半角):
\n"; print "\n"; print "\n"; } print <<"EOM";

▼新着投稿メールマガジンの「解除」

メールアドレス(半角):


*1 : 登録したアドレスを「変更」する場合は、一旦「解除」した後、新規に「登録」して下さい。
*2 : セキュリティ上、同一ホストからの連続登録はできません。
EOM exit; } #----------------# # メール仮登録 # #----------------# sub join_in { $headflag=0; if ($in{'email'} =~ /\,/) { &error("メールアドレスにコンマが含まれています"); } if ($in{'email'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,5}$/) { &error("メールアドレスの入力が不正です"); } # 小文字に統一 $in{'email'} =~ tr/[A-Z]/[a-z]/; # ホスト名を取得 &get_host; # ロック開始 &lock if ($lockkey); # 地区・カテゴリ編集 local($cat)=""; @mct = split(/\0/,$in{'cate'}); foreach $ct (@mct){ $cat = "$cat$ct
"; } local($chik)=""; @mck = split(/\0/,$in{'chiku'}); foreach $ck (@mck){ $chik = "$chik$ck
"; } # 本会員ファイルを読み込み $i=0; $flag=0; open(IN,"$memfile") || &error("Open Error : $memfile"); while () { $i++; if ($i >= $mem_max) { $flag=1; last; } ($num,$date,$email,$cate2,$chiku2,$host2) = split(/<>/); if ($in{'email'} eq $email) { $flag=2; last; } } close(IN); # チェック if ($flag == 1) { &error("現在登録受付を中止しています"); } elsif ($flag == 2) { &error("ご指定のメールアドレスは既に本登録済です"); } # if ($host eq $host2) { &error("同一ホストからの連続登録はできません"); } # 仮登録 $time = time; $flag=0; @new=(); open(IN,"$memtemp") || &error("Open Error : $memtemp"); while () { ($id,$email,$time2,$cate2,$chiku2,$host2) = split(/<>/); if ($time - $time2 > 5*24*3600) { next; } push(@new,$_); } close(IN); # if ($host eq $host2) { &error("同一ホストからの連続投稿はできません"); } if ($in{'email'} eq $email) { &error("このメールアドレスは既に仮登録済です"); } # ID発行 @char = ('A'..'Z', 'a'..'z', '0'..'9'); srand; foreach (1 .. 10) { $newid .= $char[int(rand(@char))]; } # 更新 push(@new,"$newid<>$in{'email'}<>$time<>$cat<>$chik<>$host<>\n"); open(OUT,">$memtemp") || &error("Write Error : $memtemp"); print OUT @new; close(OUT); &get_time; # メール本文 $mail_body = <<"EOM"; ありがとうございます。 本日「$title」へ以下のメールアドレスの仮登録がありました。 ─────────────────────────────────── ・登録日時:$Date ・ホスト名:$host ・ブラウザ:$ENV{'HTTP_USER_AGENT'} ・メールアドレス:$in{'email'} ・このメールアドレスに間違いがなければ以下のアドレスへアクセス  をして下さい。このメールアドレスは本登録されます。 $magascript?mmb=$newid ・もしこのメールにお心当たりのない場合には、このメールは第三者の 誤登録である可能\性がありますので、このまま破棄してくださるよう お願いいたします。 ・仮登録後5日を経過しても本登録へのアクセスがない場合には、今回の 仮登録は自動的に無効となります。 EOM # open(IN,"$m_foot"); # while () { # s/\r\n|\r/\n/g; # $sig .= $_; # } # close(IN); # $mail_body .= "\n$sig"; $sub = &mimeencode("$title(仮登録)"); &jcode'convert(*mail_body,'jis'); &SendMail($master, $in{'email'}, $sub, $mail_body); # ロック解除 &unlock if ($lockkey); # 完了メッセージ if ($type eq 'p') { &header; print "
\n"; print "
\n"; print "

仮登録が完了しました

\n"; print "仮登録されたアドレス:$in{'email'}\n"; print "
\n"; print "
\n"; print "


\n"; print "
\n"; print "\n"; print "\n"; }else{ $size=0; &data("
\n"); &data("
\n"); &data("

仮登録が完了しました

\n"); &data("仮登録されたアドレス:$in{'email'}\n"); &data("
\n"); &data("
\n"); &data("


\n"); &data("
\n"); &data("\n"); &data("\n"); &header_tel($size); print @data; } exit; } #----------------# # メール本登録 # #----------------# sub new_mmb { $headflag=0; $in{'mmb'} =~ s/\W//g; if (length($in{'mmb'}) != 10) { &error("無効なアクセスです。
アドレスをよく確かめて再度アクセスし直して下さい"); } $time = time; $flag=0; @new=(); # 仮会員ファイルを読み込み open(IN,"$memtemp") || &error("Open Error : $memtemp"); while () { ($id,$email,$time2,$cate2,$chiku2) = split(/<>/); if ($in{'mmb'} eq $id) { $flag=1; $email2=$email; next; } if ($time - $time2 > 5*24*3600) { next; } push(@new,$_); } close(IN); if (!$flag) { &error("該当のメールアドレスが存在しません
(仮登録後5日を経過すると無効になります)
再度仮登録し直してみて下さい

仮登録"); } # 仮登録ファイル更新 open(OUT,">$memtemp") || &error("Write Error : $memtemp"); print OUT @new; close(OUT); # 会員ファイルを読み込み $flag=0; open(IN,"$memfile") || &error("Open Error : $memfile"); while () { $i++; ($num,$date,$email,$cate,$chiku,$ip) = split(/<>/); if ($in{'email'} eq $email) { $flag=1; last; } } close(IN); if ($flag) { &error("ご指定のメールアドレスは既に本登録済です"); } # 更新 &get_host; $num++; open(OUT,">>$memfile") || &error("Wtite Error : $memfile"); print OUT "$num<>$time<>$email2<>$cate2<>$chiku2<>$host<>\n"; close(IN); # メール本文送信 &get_time; $mail_body = <<"EOM"; ─────────────────────────────────── ■ 本登録完了のご通知 $Date ─────────────────────────────────── ただ今あなたのメールアドレスが「$title」のメールマガジン情報に 正規登録されましたので通知いたします。 メールアドレス:$email2 それでは今後ともよろしくお願いいたします。 EOM # 署名読込 # open(IN,"$m_foot"); # while () { # s/\r\n|\r/\n/g; # $sig .= $_; # } # close(IN); # $mail_body .= "\n$sig"; # 送信 $sub = &mimeencode("$title(本登録)"); &jcode'convert(*mail_body,'jis'); &SendMail($master, $email2, $sub, $mail_body); # 完了メッセージ if ($type eq 'p') { &header; print "

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

本登録が完了しました

\n"; print "本登録されたアドレス:$email2\n"; print "
\n"; print "
\n"; print "


\n"; print "
\n"; print "\n"; print "\n"; }else{ $size=0; &data("
\n"); &data("
\n"); &data("

本登録が完了しました

\n"); &data("本登録されたアドレス:$email2\n"); &data("
\n"); &data("
\n"); &data("


\n"); &data("
\n"); &data("\n"); &data("\n"); &header_tel($size); print @data; } exit; } #--------------# # マガジン準備 # #--------------# sub magaset { # メール本文を定義 &get_time; $magaurl = $magascript."?tno=$no"; # $mail_body .= "$in{'message2'}\n"; $mail_body .= "送信 : $date\n"; $mail_body .= "件名 : $in{'sub'}\n"; $mail_body .= "参照 : $magaurl\n" if ($magaurl); # $mail_body .= "参照 : $in{'url'}\n" if ($in{'url'}); # $mail_body .= "\n$in{'comment'}\n\n"; # $mail_body .= "\n$in{'message'}\n\n$in{'message3'}"; # メール送信 ## fork関数あり if ($fork) { defined ($pid = fork()) || &error("Cannot fork : $!"); if ($pid) { # 親プロセス &message; } elsif (defined($pid)) { # 子プロセス close(STDOUT); &postmail; } else { # fork失敗 die "Cannot fork : $!"; } ## fork関数なし } else { &postmail; &message; } } #--------------# # メール配信 # #--------------# sub postmail { $sub = &mimeencode($title); &jcode'convert(*mail_body,'jis'); $incate = $in{'cate'}; $inchik = $in{'chiku'}; # 会員ファイル読込 open(IN,"$memfile") || &error("Open Error : $memfile"); while () { ($num,$date,$email,$cate2,$chik2,$ip) = split(/<>/); $ctflg = 0; $chflg = 0; $actflg = 0; $achflg = 0; # 携帯オールチェック if (index($cate2,"99")>=0) { $actflg=1; } if (index($chik2,"99")>=0) { $achflg=1; } @ct = split(/
/,$cate2); foreach $ct (@ct) { if ($ct) { $ctflg=1; } } @ch = split(/
/,$chik2); foreach $ch (@ch) { if ($ch) { $chflg=1; } } if (!$ctflg) { $actflg = 1; } if (!$chflg) { $achflg = 1; } # allflgがたっていない if (!$actflg && !$achflg) { # カテゴリチェック $ctfind=0; if ($ctflg) { foreach $ct (@ct) { if ($incate == $ct) { $ctfind=1; } } if (!$ctfind) { $ctflg=0; } } # 地区チェック $chfind=0; if ($chflg) { foreach $ch (@ch) { if ($inchik == $ch) { $chfind=1; } } if (!$chfind) { $chflg=0; } } if (!$ctflg || !$chflg) { next; } } elsif (!$actflg && $achflg) { $ctfind=0; foreach $ct (@ct) { if ($incate == $ct) { $ctfind=1; } } if (!$ctfind) { $ctflg=0; } if (!$ctflg) { next; } } elsif ($actflg && !$achflg) { $chfind=0; foreach $ch (@ch) { if ($inchik == $ch) { $chfind=1; } } if (!$chfind) { $chflg=0; } if (!$chflg) { next; } } &SendMail($master, $email, $sub, $mail_body); sleep(1); } close(IN); } #----------------# # メール解除 # #----------------# sub join_out { $headflag=0; if ($in{'email'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,5}$/) { &error("メールアドレスの入力が不正です"); } # 小文字に統一 $in{'email'} =~ tr/[A-Z]/[a-z]/; # ロック開始 &lock if ($lockkey); # ファイルから該当メールをマッチングし排除 $flag=0; @new=(); open(IN,"$memfile") || &error("Open Error : $memfile"); while () { ($no,$date,$email,$ip) = split(/<>/); if ($in{'email'} eq $email) { $flag=1; next; } push(@new,$_); } close(IN); if (!$flag) { &error("ご指定のメールアドレスは見当たりませんでした"); } # ファイル更新 open(OUT,">$memfile") || &error("Write Error : $memfile"); print OUT @new; close(OUT); # ロック解除 &unlock if ($lockkey); # 完了メッセージ if ($type eq 'p') { &header; print "
\n"; print "
\n"; print "

解除は正常に終了しました

\n"; print "解除されたアドレス:$in{'email'}\n"; print "
\n"; print "
\n"; print "


\n"; print "
\n"; print "\n"; print "\n"; }else{ $size=0; &data("
\n"); &data("
\n"); &data("

解除は正常に終了しました

\n"); &data("解除されたアドレス:$in{'email'}\n"); &data("
\n"); &data("
\n"); &data("


\n"); &data("
\n"); &data("\n"); &data("\n"); &header_tel($size); print @data; } exit; } #------------------# # メール送信処理 # #------------------# sub SendMail { local($from, $to, $sub, $msg) = @_; local($hd); # MIME処理 $hd .= "To: $to\n"; $hd .= "Errors-To: $from\n"; $hd .= "From: $from\n"; $hd .= "Subject: $sub\n"; $hd .= "MIME-Version: 1.0\n"; $hd .= "Content-type: text/plain; charset=ISO-2022-JP\n"; $hd .= "Content-Transfer-Encoding: 7bit\n"; $hd .= "X-Mailer: $ver\n\n"; open(MAIL,"| $sendmail -t"); print MAIL $hd; print MAIL $msg; close(MAIL); } #----------------# # ホスト名取得 # #----------------# sub get_host { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } } #------------------------------------------------- # HTMLヘッダ #------------------------------------------------- sub header_tel { local($len) = @_; if ($headflag) { return; } local($head) = "\n$meta\n"; $head .= "$title\n"; $head .= "\n"; print "Content-Type: text/html\n\n"; if ($cont_len && $len > 0) { $len += length($head); print "Content-Length: $len\n"; } print "\n"; print $head; $headflag=1; } #------------------------------------------------- # 出力データ #------------------------------------------------- sub data { $size += length($_[0]); push(@data,$_[0]); }