#!/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@es.gentei.org" from = "公益ジュニアドクターセンター <#{sender}>" 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 = <<_EOS_ </main></body> _EOS_ 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 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よりジュニアドクター鳥海塾申請書にお進みください。 _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 end else print getapp print getapp2 end print footer