#!/usr/local/bin/ruby

## config
$mail_host = "localhost"
$mail_from = "user@domain.ne.jp"
$mail_to = ["user@domain.ne.jp"]

## main
require 'socket'
require 'thread'
require 'net/smtp'
require 'nkf'

def sstpmail(script)
 subj = ""
 scr = NKF::nkf("-Sjf",script)
 mail = "From: #{$mail_from}\n"
 mail << "To: #{$mail_to.join(',')}\n"
 mail << "X-SSTP-Mail: "
 scr.split(/\n/).each_with_index do |x,i|
  mime = "=?ISO-2022-JP?B?" + [x].pack("m").gsub(/\n/,"") + "?="
  if(i == 0)
   subj = mime
  else
   mail << "\t"
  end
  mail << mime + "\n"
 end
 mail << "Subject: #{subj}\n"
 mail << "MIME-Version: 1.0\n"
 mail << "Content-Type: text/plain; charset=ISO-2022-JP\n"
 mail << "\n"
 mail << scr + "\n"
 mail
end

def mpmailsend()
 bounds = "--Bottle_" + Time::now.ctime.gsub(/\s/,"_") + "--"
 mail = "From: #{$mail_from}\n"
 mail <<  "To: #{$mail_to.join(',')}\n"
 mail << "Subject: [bottle] " + $scripts.size.to_s + " messages\n" 
 mail << "MIME-Version: 1.0\n"
 mail << "Content-Type: multipart/mixed;boundary=\"#{bounds}\"\n\n"

 while script = $scripts.shift
  mail << "--" + bounds + "\nContent-Type: message/rfc822\n\n"
  mail << "Date: " + script.split(/\t/)[1] + "\n"
  mail << sstpmail(script.split(/\t/)[0])
 end
 mail << "--" + bounds + "--\n"
 
 Net::SMTP.start($mail_host) do |smtp|
  smtp.sendmail(mail,$mail_from,$mail_to)
 end
end

##
$scripts = []
Thread.start do
 loop do
  if(Time::now.min == 0)
    mpmailsend()
    sleep 100
  else
    sleep 1
  end
 end
end

loop do
 begin
  btl = TCPsocket.open("bottle.mikage.to",11010)
  loop do
   line = btl.gets
   if(line && line.split[0] == "Script:") 
    date = Time::now.strftime("%a, %d %b %Y %X %Z")
    $scripts.push(line.sub(/^Script:\s/,"") + "\t" + date)
   end
  end
 rescue
  sleep 60
 end
end
 
