#!/usr/bin/env ruby32 # -*- coding: utf-8 -*- require 'cgi' require './duetime' myname = File.basename($0) appform = "appform.html" sender = "jd@e.koeki-u.ac.jp" sender = "yuuji-jd-reqform@e.koeki-u.ac.jp" from = "公益ジュニアドクターセンター <#{sender}>" reqform = "yuuji-jd-reqform@e.koeki-u.ac.jp" header = <<_EOS_ <!DOCTYPE html> <head><title>Junior Doctor Chokai Academy Application Form</title> <link rel="stylesheet" type="text/css" href="../jdmain.css"> </head> <body><main class="disp"> _EOS_ footer = "</main>" + IO.readlines("../footer.html").join + "</body>\n</html>" emailform = <<_EOS_ <form action="#{myname}" method="POST"> Email: <input name="email" size="50"> <input type="submit" value="送信"> <input type="reset" value="reset"> </form> _EOS_ getapp = <<_EOS_ <h1>申し込みフォームURL送付</h1> <p>以下の枠内にemailアドレスを入れてください。 そこに申し込みフォームの専用URLを送信します。 Emailの到達性確認を兼ねています。携帯電話会社のアドレスではなく 主にPCで利用しているアドレスなどがあればそれを入れてください (※審査に合格し受講した場合は期間中だけでなく卒業後も連絡に使いますので確実に連絡が取れ、かつ永く使えるアドレスを入れてください)。</p> #{emailform} <p>申し込みフォーム取り寄せだけでは申請は始まりませんのでお気軽にアクセスしてください。</p> <p><em>icloudの容量オーバー</em>で届かないエラーが多発しているようです。</p> _EOS_ getapp2 = open("note.html"){|n| n.read} sent = <<_EOF_ <h1>送信しました</h1> <p>%s 宛にジュニアドクター鳥海塾申請書URLを送信しました。</p> <p>数分待っても届かない場合は以下を確認してください。</p> <ul> <li>icloudが容量オーバーになっていませんか</li> <li>上記の宛先はあっていますか。</li> <li>あっている場合は迷惑フィルタを全てOFFにして再度試してください。</li> <li>それでも届かない場合はアドレスを変えて試してください。</li> <li>どうしてもうまく行かない場合は <a href="JDentrySheet-R6.03.pdf">申請シート</a>からの応募をご検討ください。</li> </ul> <p>科学技術振興機構(JST)では、 一人でも多くの子どもたちに才能開花の機会を与えることを目指しており、 公益大もそれに応える体制で応募をお待ちしています。</p> <p><a href="./#{myname}">もどる</a></p> _EOF_ nodom = <<_EOF_ <h1>emailアドレスエラー</h1> <p>%s は存在しないドメインのようです。 別のアドレスを試してみてください。</p> #{emailform} _EOF_ c = CGI.new(:accept_charset => "UTF-8") print "Content-type: text/html; charset=UTF-8\n\n" print header email = c["email"] if Time.now > DueTime.new.due print "<p>今年度の募集は締め切りました。</p>" print "<p>次年度の募集までお待ちください。ありがとうございました。</p>" elsif email > "" then # https://rubyreferences.github.io/rubyref/stdlib/networking-web/resolv.html require 'resolv' dom = email.sub(/.*@/, '') rs = Resolv::DNS.open do |dns| dns.getresources(dom, Resolv::DNS::Resource::IN::MX) end if rs.empty? then printf(nodom, email) else require 'digest' mid = Digest::SHA256.hexdigest(email)[0, 10] url = sprintf("%s://%s%s?email=%s+mid=%s", ENV["HTTP_SCHEME"]||"https", ENV["HTTP_HOST"]||"localhost", (ENV["REQUEST_URI"]||".").sub(myname, appform), CGI.escape(email), CGI.escape(mid)) # Construct message require 'nkf' sj = NKF.nkf('-jM', "JD鳥海塾応募フォームURL").strip fr = NKF.nkf('-jM', from).strip body = NKF.nkf('-j', <<~_EOS_) ジュニアドクター鳥海塾受講応募フォームURLは以下のとおりです。 心当たりのない場合は無視するか、 続く場合は #{sender} 宛に問い合わせてください。 #{url} 上記URLよりジュニアドクター鳥海塾申請書にお進みください。 この申請書URLは受信された方専用のものです。 他の方に転送しないでください。 このURLが他人に使われるとご自身の申込みが無効となります。 _EOS_ printf(sent, email) # Date: #{Time.now.strftime("%a, %d %b %Y %T %z")} open("| sendmail -f #{sender} #{email}", "w") do |m| m.puts(<<~EOS) To: #{email} From: #{fr} Subject: #{sj} Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: Text/Plain; charset=iso-2022-jp #{body.force_encoding('binary')} EOS end open("| sendmail -f #{sender} #{reqform}", "w") do |m| addr = ENV['REMOTE_ADDR'] m.puts(<<~EOS) To: #{reqform} Subject: JDform Request Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: Text/Plain; charset=iso-2022-jp EOS m.write(NKF.nkf('-j', "JDフォーム要求: #{addr}\n" \ + `host #{addr}` \ + email)) end end else print getapp print getapp2 end print footer