#!/usr/local/bin/perl # # CGIフォーム入力とメール   # # id=mail.cgi # # update=99.4.3 # 日本語コード変換ライブラリ(v2.0)の指定 # (このCGIと同じディレクトリに設置する場合は、'./jcode.pl'でよい) # &ReadParse命令で、$in{ }の変数にフォーム入力データが格納される require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; # 設置するURLを設定 $reload = 'http://www0.kumagaya.or.jp/cgi-bin/users/chichibu/mail.cgi'; $sendmail = '/usr/lib/sendmail'; # メールの送り先 $myaddress = 'chichibu@po.kumagaya.or.jp'; #################################### # # # メインルーチン(処理の分岐) # # # #################################### # 全体の流れを決定する(actionやpwdはフォーム入力されたデータを格納する名前) # action=check --> フォーム入力データのチェック処理へ # その他 --> フォーム入力画面へ if ($in{'action'} eq 'first') { &first; } elsif ($in{'action'} eq 'check') { ✓ } elsif ($in{'action'} eq 'send') { &sendmail; } else { &first; } ############################################# # # # 最初に表示する画面          # # # ############################################# sub first { print "Content-type: text/html\n\n"; print < メールの練習 (3) 8/26

メールの練習


EOM print '

このサイトについてのコメントをいただけると嬉しいです。

'."\n"; print '
' . "\n"; print '' . "\n"; print 'あなたのお名前は?
' . "\n"; print '
'; print 'メールアドレスは?
' . "\n"; print '
'; print 'コメントをどうぞ(漢字150字以内)'; print '
'; print '' . "\n"; print '

'; print 'オン=入力データを入力アドレス先にも送る・オフ=送らない
' . "\n"; print '

'; print '

' . "\n"; print '

'. "\n"; } ############################################# # # # 入力データ確認表示画面ルーチン     # # # ############################################# sub kakunin { print "Content-type: text/html\n\n"; print < メール入力データの確認

入力データの確認


EOM # フォームからの入力データ $name=$in{'name'}; $addr=$in{'addr'}; $comm=$in{'comm'}; # タグの無効化 $ckdt=$name ; &tagck ; $name=$ckdt; $ckdt=$addr ; &tagck ; $addr=$ckdt; $ckdt=$comm ; &tagck ; $comm=$ckdt; # コメントの改行のみをカットする @disp = split(/\n/,$comm); $msg=""; foreach (@disp) { if (length($_) > 1) { $msg=$msg.$_."\n"; } # end of if } # end of foreach $comm=$msg; # コメントの文字長チェック if (length($comm) > 300) {$comm = substr($comm,0,300) ; } print "お名前:$in{'name'} 様"."\n"; print '
'; print "アドレス:$in{'addr'}"."\n"; print '
'; print "コメント:$in{'comm'}"."\n"; print '

'; if ($in{'ret'} eq 'on') { 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"; exit; } # # タグの無効化サブルーチン # sub tagck { $ckdt =~ s//>/ig; $ckdt =~ s///ig; } ########################################## # # # 入力されたデータのチェックルーチン # # # ########################################## sub check { # なにも入力がない場合 if ($in{'name'} eq "" && $in{'addr'} eq "" && $in{'comm'} eq "") { &error(2); } # 英数字と@と.と_と-(大文字と小文字の違いを無視するiフラグ) if ($in{'addr'} =~ /[^a-z0-9@._-]/i) { &error(0); } # メールアドレスが入力されたとき1つの@とその後ろに.が含まれているばOKでそうでないならエラー if ($in{'addr'} ne "") { if (!($in{'addr'} =~ /.*\@.*\..*/)) { &error(0); }} # メールアドレスが短すぎる場合 if ($in{'addr'} ne "") {if (length($in{'addr'}) < 6) { &error(3); }} # チェック通過 &kakunin; } ############################################# # # # チェックエラー表示画面ルーチン      # # # ############################################# sub error { # &error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。 $error = $_[0]; if ($error eq "0") { $error_msg = 'メールアドレスが正しく入力されていません。'; } elsif ($error eq "2") { $error_msg = '入力データがひとつもありません。'; } elsif ($error eq "3") { $error_msg = 'メールアドレスが短すぎます。'; } print "Content-type: text/html\n\n"; print 'メールの練習入力エラー' . "\n"; print '' . "\n"; print '

メールの練習入力で下記のエラーが発生しました

' . "\n"; print "$error_msg\n"; print '
'; # リロードでもどると入力データが消えてしまうので print 'ブラウザ画面の戻るをクリックする'."\n";; print '
'; print '入力の確認表示

' . "\n"; print '
'; print 'action: '.$in{'action'}.''."\n"; print '
'; print 'name: '.$in{'name'}.''."\n"; print '
'; print 'email: '.$in{'addr'}.''."\n"; print '
'; print 'biko: '.$in{'comm'}.''."\n"; print '
'; print '

' . "\n"; exit; } ############################################# # # # メール送信ルーチン           # # # ############################################# sub sendmail { $message = <\n"; print "\n"; print "mail.cgi \n"; print "\n"; print "\n"; print '送信を完了しました。ありがとうございました'."\n"; print '

' . "\n"; print '' . "\n"; print ''."\n"; print "
\n"; print "\n"; print "\n"; }