今日もpingツールネタ

mail送信

昨日も書いたように,JScriptからメールを送るにはhttp://yamashita.dyndns.org/blog/358のコードがそのまま使えます.pingに失敗したIPアドレスをメール本文に記載できるように,%IPADDR%というキーワードがあったらそれをIPアドレスに置き換えてメールするようにしてみました.

  var text = $("textarea[@name='body']").val();
  cdm.TextBody = text.replace(/%IPADDR%/gm, ip);
  try {
    cdm.Send();
  } catch(e) {
    if( e.description.match(/0x800ccc15/)){
      alert("おそらくアンチウィルスソフトによってブロックされました");
  }else{
      alert(e.description);
    }
  }

スクリプト中に"0x800ccc15"というのがでてきますが,これは私がはまったwindowsのエラーコードです.私のPCにはMcAfee VirusScanをインストールしてあるのですが,これ,「大量メール配信型ワームにメールを送信させない」というルールを持っています.メールを送信できるようにするためには,このルールを「除外するプロセス」に"mshta.exe"を追加させてやる必要があります.他のプロダクトだと他のエラーがでるかもしれませんが,手元にないので確かめることができませんでした.

タブ

pingのstart/stopと実行結果を出力するエリア,ping対象を記載するエリア,mail設定を記載するエリア,と3つに分割できるので,タブを使ってエリアを分割することにしました.最初はjQueryを使ったタブ切り替えインターフェース| KADOYAN.comを使ってみたのですが,もうちょっとコードを短くできると思ったので自前で作り直してみました.'pin'が立っているdivタブの中身のみ表示するようにしています.

$(function(){
  function showTab () {
    $('.tab/div').hide();
    $($('.tablist/li.pin/a').attr('href')).show();
  }
  $(".tablist/li/a").click(function() {
    $('.tablist/li.pin').removeClass();
    $(this).parent().addClass('pin');
    showTab();
    return false;
   });

  window.resizeTo(400,350);
  showTab();
});

このスクリプトで制御するhtmlファイルは以下のようになります.liでタブを表現して,divタグで表示するデータを表現しています.

<body>
<div class="tab">
 <ul class="tablist">
  <li class="pin"><a href="#home">home</a></li>
  <li><a href="#ping">ping</a></li>
  <li><a href="#mail">mail</a></li>
 </ul>
 <div id="home">
  <form>
   <input type="button" value="開始" onClick="p_start()"/>
   <input type="button" value="停止" onClick="p_stop()"/>
  </form>
  </hr>
  実行ログ
  <div id="log">
  </div>
 </div>
 <div id="ping">
  <form>
  対象機器IPアドレス
   <div class="ping">
    <input type="txt" class="pinger ipaddr" value="127.0.0.1" />
   </div>
   <div class="ping">
   <input type="txt" class="pinger ipaddr" value="" />
   </div>
   <div class="ping">
    <span class="name">ping間隔</span>
    <select class="pinger" name="tspan">
     <option value="300000">5分</option>
     <option value="1800000">30分</option>
     <option value="3600000">1時間</option>
    </select>
   </div>
   <div class="ping">
    <span class="name">リトライ間隔</span>
    <select class="pinger" name="retryt">
     <option value="10000">10秒</option>
     <option value="30000">30秒</option>
     <option value="60000">1分</option>
    </select>
   </div>
   <div class="ping">
    <span class="name">リトライ回数</span>
    <select class="pinger" name="retryts">
     <option value="2">2回</option>
     <option value="3">3回</option>
    </select>
   </div>
  </form>
 </div>
 <div id="mail">
  <form>
   <div class="mail">
    <span class="name">Smtp Server:</span>
    <input type="text" name="smtp" value="" />
   </div>
   <div class="mail">
    <span class="name">From:</span>
    <input type="text" name="from" value="" />
   </div>
   <div class="mail">
    <span class="name">To:</span>
    <input type="text" name="to" value="" />
   </div>
   <div class="mail">
    <span class="name">Subject:</span>
    <input type="text" name="subject" value="" />
   </div>
   <div class="mail">
    <div class="name">Text Body:</div>
    <textarea name="body" rows="8" cols="40"/></textarea>
   </div>
  </form>
 </div>
</div>
</body>

このhtmlには次のようなcssを作ってみました.

.tablist {
 margin: 0;
 padding: 1px;
}

.tablist li {
 float: left;
 margin-right: 2px;
 margin-bottom: 0;
 padding: 1px 4px;
 list-style: none;
 font-weight: normal;
 background: #bbb;
 border: 1px solid #999;
}

.tablist li.pin {
 background: #fff;
 border-bottom: 0;
}

.tab #home, .tab #ping, .tab #mail {
 clear: both;
 padding: 2px 5px;
 background: #fff;
 border: 1px solid #999;
 height: 265px;
}

.name {
 width: 100px;
}

#log {
 height: 200px;
 border: 2px solid #ffa000;
 overflow: auto;
}

.log.date {
 float: left;
 }

.log.msg {
 float: right;
 }

これでできあがりです."pinger.hta"をダブルクリックした時,一瞬(というにはちょっと長いけど)真っ白ででかいウィンドウが立ち上がってから指定したサイズになって起動するのが難点ですが,我慢してもらえるかな,と.とりあえず動くことは確認したのですが,まだ長時間動かしてみた事はないので何か問題があるかもしれません.メモリリークはちょっと怖いな.