一定時間ごとに指定SMTPサーバを使ってメールを送信、もしエラーになったら手近なSMTPサーバを使い通報という簡単な仕掛け。まさに雑品だ :D
簡単にすますためRubyで書いてみる。net/smtpと例外処理におんぶでだっこだが、それでもまぁ間に合うだろう。uconvを使っているのは単に私の環境で基本UTF-8だからだ。
#!/usr/bin/ruby
require "net/smtp"
require "uconv"
require "kconv"
def sendmail(s,p,from,to,subject,script)
Net::SMTP.start(s,p) {|smtp|
smtp.send_mail <<EndOfMail, from,to
From: #{from}
To: #{to}
Content-Type: text/plain; charset=ISO-2022-JP
MIME-Version: 1.0
Subject: #{subject}
#{script}
EndOfMail
}
end
################
smtpserver = '試験対象サーバ名'
from = '発信元メールアドレス'
to = '着信先メールアドレス'
errorto = 'エラー通報先メールアドレス'
begin
sendmail(smtpserver,25,from,to,
'TEST OK','TEST OK')
rescue
smtpserver2 = 'localhost'
subject = "EMERGENCY SMTPSERVER"
script = Uconv.u8toeuc("通信異常検出。#{smtpserver}")
script = Kconv.tojis(script)
sendmail(smtpserver2,25,from,errorto,
subject,script)
end
指定SMTPサーバを使い、動作報告用アドレスにメール送信を試みる。送り先は指定条件を満たしてさえいればダミーで構わない。またこの例ではSMTP認証用ではないのだが、認証つきでも手間はほとんど変わらない。
上の例だと、なんらかの理由で送信失敗すると速攻でエラーが飛んでしまう。リトライする等のルーズな仕様も本当は必要だと思うが、今回は必要なかったのでこうしてある。