プロが教える店舗&オフィスのセキュリティ対策術

Javamailを用いて、プログラムを実行することでメールを送ることには成功しました。

ここからが本題なのですが、
プログラムをループさせたままにして、
Javaで時刻を指定して(何時何分、というように)
メールを送信することは出来るのでしょうか。
一日につき5回程送りたいと思っています。

CalenderやDateを使用することも考えたのですが、
上手くループせず定時の送信は出来ませんでした。
ちなみに作ったものがこちらです↓

package mailSend;

import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

public class MailXML {
public static void main(String[] args) throws AddressException, MessagingException, IOException{
Calendar cal = Calendar.getInstance();

while(true){
int hournow = cal.get(Calendar.HOUR_OF_DAY);
int minnow = cal.get(Calendar.MINUTE);
System.out.println(hournow + ":"+ minnow);
while(hournow == 1 && minnow == 25 ){
Mail.gatemsg();

Mail.roommsg();
break;
}
}
}
}

メールの送り先と内容はいつも同じです。
ループする(1回/分)ごとに上手くhournow()とminnnow()が更新されればよいのですが…。
そもそものやり方がおかしいのか、小さな勘違いをしているだけなのかもわかりません。
どなたか解決方法をお願いします。

A 回答 (3件)

OSのスケジューラを使うのは他の方が述べているので、あえてJavaで



import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Test{
public static void main(String[] args){
//現在時間を表示するtask
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println(now());
}
};

Timer timer = new Timer();
//今から5秒間隔でtaskを実行する
timer.schedule(task, now(), 5*sec());
}

//現在日時取得用
static Date now(){
return new Date();
}

//ミリ秒の秒へ変換用
static long sec(){
return 1000;
}

}

参考URL:http://www.atmarkit.co.jp/fjava/javatips/078java …
    • good
    • 0

cron を使ってメール送信プログラムを定時起動すれば、メール送信プログラムで時刻管理をしなくて済むでしょう。

    • good
    • 0

確かに Calendar.getInstance() で現在の時刻を取得できます。

しかし、それで取得した時刻が自動的に現在時刻に更新されるわけではありません。
とりあえず、Calendar.getInstance() をループの中に入れればたぶんうまくいくでしょう。

……が、自分ならメールを一回送るだけのプログラムを作って、定時実行の方は OS の機能でやらせます。Windows ならタスクスケジューラ、UNIX 系なら……何だったっけ? とにかく定時に特定のプログラムを実行させる機能があるはずです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!