java - 如何在特定时间发送电子邮件?

时间:2012-01-16 08:45:20

标签: java jsf javamail tomcat7

我正在使用tomcat 7.0开发Java App(JSF 2.0)。我需要每天在卡塔恩时间发送一封电子邮件。我将使用JavaMail发送电子邮件,但如何让它在特定时间每天发送电子邮件。中午说。

任何和所有帮助都有很大帮助!

4 个答案:

答案 0 :(得分:2)

最佳和灵活的解决方案是使用Quartz Scheduler。您需要的是根据您的指定要求创建一个Job和一个触发器,然后就完成了。

详情请参阅官方文件

Quartz-Scheduler-Tutorials

答案 1 :(得分:1)

由于Tomcat是一个简单的servlet容器,它不提供内置的调度工具,也不支持非常方便的EJB @Schedule注释,您需要自己管理调度,或者使用第三方库,如Quartz ,或者只是将作业委托给底层操作系统平台的调度工具,例如基于Windows的平台中的Task Scheduler和基于Unix的平台中的Cron。

使用标准API时,您可以使用ServletContextListener在启动时初始化调度程序,并可以使用ScheduledExecutorService作为调度程序。

这是一个启动示例:

@WebListener
public class Config implements ServletContextListener {

    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        long secondsUntilNoon = calculateItSomehow();
        long secondsPerDay = 60 * 60 * 24;
        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Mailer(), secondsUntilNoon, secondsPerDay, TimeUnit.SECONDS);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        scheduler.shutdownNow();
    }

}

Mailer类看起来像这样:

public class Mailer implements Runnable {

    @Override
    public void run() {
        // Do your mailing job here.
    }

}

另见:

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以按照Umesh的建议安排电子邮件发送您的Quartz调度程序,您可以使用以下代码开始:

//set quartz properties in propreties file or map

SchedulerFactory schedFact = new StdSchedulerFactory();

Scheduler sched = schedFact.getScheduler();

//set these parameters
JobDetail jobDetail = new JobDetail( "Email Job" , Scheduler.DEFAULT_GROUP , MyEmailAction.class );

//add data or objects you may require in your scheduled job
JobDataMap dataMap = jobDetail.getJobDataMap();

dataMap.put("mydata", myDataObj);

SimpleTrigger st = new SimpleTrigger();

st.setName("DeployTrigger");            

//set the time when you want to send email

st.setStartTime( java.util.Date );

sched.scheduleJob( jobDetail , st  );

sched.start();