Newer
Older
web / apply / getapp.rb
@HIROSE Yuuji HIROSE Yuuji on 6 Jul 5 KB Switched to the 2nd admission
#!/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="JDentrySheet2.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