コマンド実行結果をメールする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(