#!/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