一定時間ごとに指定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認証用ではないのだが、認証つきでも手間はほとんど変わらない。
上の例だと、なんらかの理由で送信失敗すると速攻でエラーが飛んでしまう。リトライする等のルーズな仕様も本当は必要だと思うが、今回は必要なかったのでこうしてある。