#!/usr/bin/env ruby27
# -*- coding: utf-8 -*-
require 'cgi'
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>
_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}
申し込みフォーム取り寄せだけでは申請は始まりませんのでお気軽にアクセスしてください。
_EOS_
getapp2 = open("note.html"){|n| n.read}
sent = <<_EOF_
<h1>送信しました</h1>
<p>%s 宛にジュニアドクター鳥海塾申請書URLを送信しました。</p>
<p>数分待っても届かない場合は以下を確認してください。</p>
<ul>
<li>上記の宛先はあっていますか。</li>
<li>あっている場合は迷惑フィルタを全てOFFにして再度試してください。</li>
<li>それでも届かない場合はアドレスを変えて試してください。</li>
</ul>
<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 > Time.mktime(2022,5,13,17,0)
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