コマンド実行結果をメールするJavaプログラム


コマンド実行結果をメールするJavaプログラムのサンプルを以下にメモ書き


このプログラムを動かすのは


mail.jar



commons-collections-*.*.jar (ExtendedPropertiesを動かすだけなのでバージョンは特に重要ではない)


が必要です。


起動パラメータとして設定ファイルのパスを指定します。


 ●プログラム例


package org.dyndns.k2ca3.mail;


import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.Date;

import java.util.Properties;


import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;


import org.apache.commons.collections.ExtendedProperties;


public class CmdMail {

 public static void main(String[] args) {

  try {

   ExtendedProperties epr = new ExtendedProperties();

   FileInputStream fis = null;

   try{

    fis = new FileInputStream(args[0]);

    epr.load(fis,"UTF-8");

   }finally{

    if(fis != null){

     fis.close();

    }

   }

   

   // プロセスオブジェクトを生成

   Process process = Runtime.getRuntime().exec(epr.getString("cmd"));


      // 外部コマンドの標準出力を取得するための入力ストリームを取得

      StringBuffer sb = new StringBuffer(800);

      InputStream is = null;

      BufferedReader br = null;

      try{

       is = process.getInputStream();

       br = new BufferedReader(new InputStreamReader(is));

      // 標準出力を1行づつ取り出します

      String line;

      while *1 != null) {

        sb.append(line + "<br>");

      }

      }finally{

       if(br != null){

        br.close();

       }

       if(is != null){

        is.close();

       }

      }


   Properties props = System.getProperties();

   // SMTPサーバーのアドレスを指定

   props.put("mail.smtp.host", epr.getString("smtp.host"));

   Session session = Session.getDefaultInstance(props, null);

   MimeMessage mimeMessage = new MimeMessage(session);

   // 送信元メールアドレスと送信者名を指定

   mimeMessage.setFrom(new InternetAddress(epr.getString("from.address"),

     epr.getString("from.name"), "iso-2022-jp"));

   // 送信先メールアドレスを指定

   mimeMessage.setRecipients(Message.RecipientType.TO,

     epr.getString("to.address"));

   // メールのタイトルを指定

   mimeMessage.setSubject(epr.getString("subject"), "iso-2022-jp");

   // メールの内容を指定

   mimeMessage.setText(sb.toString(), "iso-2022-jp");

   // メールの形式を指定

   mimeMessage.setHeader("Content-Type", "text/html");

   // 送信日付を指定

   mimeMessage.setSentDate(new Date());

   // 送信します

   Transport.send(mimeMessage);

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

}


設定ファイル例


cmd=tail -100 /var/log/httpd/access_log

smtp.host=hoge.smtp

from.address=from@hoge.com

from.name=2ca3

to.address=to@hoge.com

subject=ログ

*1:line = br.readLine(