設問
次に示すようなフォームページを作成せよ.
フォームのソースファイルとメール転送のCGIスクリプトを用意し,申込者 が記入して送信すると,申込者に確認のメールを返すような仕組とする.宿題の HTMLファイルとCGIスクリプトを 提出後に縄手の方で動作確認するので,その返信メールも採点対象とする.
Strike |
Freedom |
Justice |
Saviour |
Destiny |
Infinite |
アドレス欄に入力したアドレスとする.
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> <title>コンピュータネットワーク基礎2005.07.08Aクラス宿題</title> </head> <body> <table border=0 cellspacing=0 cellpadding=3 width=100%> <tr> <td bgcolor="#ddffee"> <b>コンピュータネットワーク基礎2005.07.08<br>Aクラス宿題</b> </td> </tr> </table> <br> 宿題スクリプト返信フォーム <form action="taska.cgi" method="POST"> ■メールアドレス記入欄<br> <textarea name="to" cols="50" rows="1"></textarea><br> <br> ■どれか一つを選択<br> <select name="gundam"> <option value="Stike">Strike <option value="Freedom">Freedom <option value="Justice">Justice <option value="Saviour">Saviour <option value="Destiny">Destiny <option value="Infinite">Infinite </select><br><br> ■テスト例文記入欄<br> <textarea name="comment" cols="50" rows="5"></textarea><br> <input type="submit" value="送信"> <hr size="3" color="#DFD8DF"> </form> </body> </html> |
CGIスクリプト
#!/usr/bin/ruby -Ke # このCGIがHTMLとして読み込む物だとブラウザに指示 require "cgi" # cgiライブラリの読込 require "net/smtp" # SMTPライブラリの読込 require "kconv" # kconvライブラリの読込 require "base64" # base64ライブラリの読込 require "timeout" # timeoutライブラリの読込 # フォームデータの読出し form = CGI.new print "Content-type: text/html\n\n" to = form["to"][0].to_s answer = form["answer"][0].to_s comment = form["comment"][0].to_s # (1)初期設定 MailSubject = "s0340**A宿題" # 送信メールのSubject MailFrom = "nawate@mag.shimane-u.ac.jp" MailTo = to MailServer = "localhost" # メールサーバーのホスト名 error_message = "" # エラーメッセージ # (2)メールテキスト作成メソッド def make_mail_text(subject, from, to, body) # このメソッドの初期設定 char_set = 'iso-2022-jp' len = 15 mail_subject = '' # Subject部分の作成 # =?(CharactorSet)?B?(BASE64エンコードされた文字列)?=\n の形式のテキスト subject.scan(/.{1,#{len}}/s) do |str| str_jis = Kconv::tojis($&) mail_subject += " =?" + char_set + "?B?" + encode64(str_jis).chomp + "?=" + "\n" end # メールのテキストの作成 mail_text = <<-EndOfMail Subject:#{mail_subject}To: #{to} From: #{from} Content-Type: text/plain; charset=#{char_set} MIME-Version: 1.0 #{Kconv::tojis(body)} EndOfMail return(mail_text) end # (3)メールの送信 def send_mail(host, src, from, to) timeout(20) do Net::SMTP.start( host, 25 ) do |session| session.send_mail( src, from, to ) end end end # (4)エラー表示 def error_print(message) print <<-EOF # HTMLの表示 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>RubyCGI練習フォームエラー</title> </head> <body> <table border=0 cellspacing=0 cellpadding=3 width=100%> <tr> <td bgcolor="#DFD8DF"> <b>フォーム練習ページ</b> </td> </tr> </table> <h2>エラー</h2> 理由:<br> #{message}<br><br> 以上のエラーが発生した為にアンケートの送信を取りやめました。<br> エラー内容を確認した後、前の画面に戻って送信をやり直してください。<br> <form><input type=button value="戻る" onclick="javascript:history.back()"> <hr size="3" color="#DFD8DF"> </form> </body> </html> EOF exit end # (5)フォームチェック # 受け取るフォームデータのチェック error_message += "・答に異常があります。<br>\n" if !(answer =~ /^[012345]$/) # エラーがあったら error_print(error_message) if error_message != "" # (6)メール送信 # メールの本文の作成 mail_body = <<EOF answer: #{answer} comment #{comment} EOF mail_src = make_mail_text(MailSubject, MailFrom, MailTo, mail_body) # メールソースの作成 # smtpでメールの送信と例外処理 begin send_mail(MailServer, mail_src, MailFrom, MailTo) rescue error_message += "・メール送信に失敗しました。<br>\n" end # エラーがあったら error_print(error_message) if error_message != "" # (7)ありがとうメッセージの表示 print <<EOF # HTMLの表示 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>宿題提出完了</title> </head> <body> <table border=0 cellspacing=0 cellpadding=3 width=100%> <tr> <td bgcolor="#DFD8DF"> <b>練習フォーム</b> </td> </tr> </table> <h2>完了</h2> 宿題提出完了 <hr size="3" color="#DFD8DF"> </body> </html> EOF |
設問
次に示すようなフォームページを作成せよ.
フォームのソースファイルとメール転送のCGIスクリプトを用意し,申込者 が記入して送信すると,申込者に確認のメールを返すような仕組とする.宿題の HTMLファイルとCGIスクリプトを 提出後に縄手の方で動作確認するので,その返信メールも採点対象とする.
Strike |
Freedom |
Justice |
Saviour |
Destiny |
Infinite |
アドレス欄に入力したアドレスとする.
HTMLファイル
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> <title>コンピュータネットワーク基礎2005.07.08Bクラス宿題</title> </head> <body> <table border=0 cellspacing=0 cellpadding=3 width=100%> <tr> <td bgcolor="#eeffcc"> <b>コンピュータネットワーク基礎2005.07.08<br>Bクラス宿題</b> </td> </tr> </table> <br> 宿題スクリプト返信フォーム <form action="taska.cgi" method="POST"> ■メールアドレス記入欄<br> <textarea name="to" cols="50" rows="1"></textarea><br> <br> ■どれか一つを選択<br> <select name="gundam"> <option value="Stike">Strike <option value="Freedom">Freedom <option value="Justice">Justice <option value="Saviour">Saviour <option value="Destiny">Destiny <option value="Infinite">Infinite </select><br><br> ■テスト例文記入欄<br> <textarea name="comment" cols="50" rows="5"></textarea><br> <input type="submit" value="送信"> <hr size="3" color="#DFD8DF"> </form> </body> </html> |
CGIスクリプト
#!/usr/bin/ruby -Ke # このCGIがHTMLとして読み込む物だとブラウザに指示 require "cgi" # cgiライブラリの読込 require "net/smtp" # SMTPライブラリの読込 require "kconv" # kconvライブラリの読込 require "base64" # base64ライブラリの読込 require "timeout" # timeoutライブラリの読込 # フォームデータの読出し form = CGI.new print "Content-type: text/html\n\n" to = form["to"][0].to_s answer = form["answer"][0].to_s comment = form["comment"][0].to_s # (1)初期設定 MailSubject = "s0340**B宿題" # 送信メールのSubject MailFrom = "nawate@mag.shimane-u.ac.jp" MailTo = to MailServer = "localhost" # メールサーバーのホスト名 error_message = "" # エラーメッセージ # (2)メールテキスト作成メソッド def make_mail_text(subject, from, to, body) # このメソッドの初期設定 char_set = 'iso-2022-jp' len = 15 mail_subject = '' # Subject部分の作成 # =?(CharactorSet)?B?(BASE64エンコードされた文字列)?=\n の形式のテキスト subject.scan(/.{1,#{len}}/s) do |str| str_jis = Kconv::tojis($&) mail_subject += " =?" + char_set + "?B?" + encode64(str_jis).chomp + "?=" + "\n" end # メールのテキストの作成 mail_text = <<-EndOfMail Subject:#{mail_subject}To: #{to} From: #{from} Content-Type: text/plain; charset=#{char_set} MIME-Version: 1.0 #{Kconv::tojis(body)} EndOfMail return(mail_text) end # (3)メールの送信 def send_mail(host, src, from, to) timeout(20) do Net::SMTP.start( host, 25 ) do |session| session.send_mail( src, from, to ) end end end # (4)エラー表示 def error_print(message) print <<-EOF # HTMLの表示 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>RubyCGI練習フォームエラー</title> </head> <body> <table border=0 cellspacing=0 cellpadding=3 width=100%> <tr> <td bgcolor="#DFD8DF"> <b>フォーム練習ページ</b> </td> </tr> </table> <h2>エラー</h2> 理由:<br> #{message}<br><br> 以上のエラーが発生した為にアンケートの送信を取りやめました。<br> エラー内容を確認した後、前の画面に戻って送信をやり直してください。<br> <form><input type=button value="戻る" onclick="javascript:history.back()"> <hr size="3" color="#DFD8DF"> </form> </body> </html> EOF exit end # (5)フォームチェック # 受け取るフォームデータのチェック error_message += "・答に異常があります。<br>\n" if !(answer =~ /^[012345]$/) # エラーがあったら error_print(error_message) if error_message != "" # (6)メール送信 # メールの本文の作成 mail_body = <<EOF answer: #{answer} comment #{comment} EOF mail_src = make_mail_text(MailSubject, MailFrom, MailTo, mail_body) # メールソースの作成 # smtpでメールの送信と例外処理 begin send_mail(MailServer, mail_src, MailFrom, MailTo) rescue error_message += "・メール送信に失敗しました。<br>\n" end # エラーがあったら error_print(error_message) if error_message != "" # (7)ありがとうメッセージの表示 print <<EOF # HTMLの表示 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>宿題提出完了</title> </head> <body> <table border=0 cellspacing=0 cellpadding=3 width=100%> <tr> <td bgcolor="#DFD8DF"> <b>練習フォーム</b> </td> </tr> </table> <h2>完了</h2> 宿題提出完了 <hr size="3" color="#DFD8DF"> </body> </html> EOF |
Back |