#!/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"
from = form["from"][0].to_s
answer = form["answer"][0].to_s
comment = form["comment"][0].to_s
# (1)初期設定
MailSubject = "フォーム送信練習" # 送信メールのSubject
MailFrom = from
MailTo = "nawate@mag.shimane-u.ac.jp" # メールの受信者アドレス(必ず自分の使っているメールアドレスに変更して下さい。)
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の表示
RubyCGI練習フォームエラー
エラー
理由:
#{message}
以上のエラーが発生した為にアンケートの送信を取りやめました。
エラー内容を確認した後、前の画面に戻って送信をやり直してください。
EOF
exit
end
# (5)フォームチェック
# 受け取るフォームデータのチェック
error_message += "・答に異常があります。
\n" if !(answer =~ /^[012345]$/)
# エラーがあったら
error_print(error_message) if error_message != ""
# (6)メール送信
# メールの本文の作成
mail_body = <\n"
end
# エラーがあったら
error_print(error_message) if error_message != ""
# (7)ありがとうメッセージの表示
print <
RubyCGIフォーム練習完了
完了
フォーム練習にご協力いただき誠にありがとうございました。