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

java-如何在特定时间发送电子邮件?,java,jsf,jakarta-mail,tomcat7,Java,Jsf,Jakarta Mail,Tomcat7,我正在使用Tomcat7.0开发一个Java应用程序(JSF2.0)。我每天都要在卡塔因时间发一封电子邮件。我将使用JavaMail发送电子邮件,但是如何让它每天在特定的时间发送电子邮件呢。比如说中午 非常感谢所有的帮助 最佳且灵活的解决方案是使用Quartz Scheduler。您只需按照指定的要求创建一个作业和一个触发器,就完成了 详情请参阅官方文件 您可以使用计时器任务 或石英调度器 您可以按照Umesh的建议,通过电子邮件安排您的Quartz调度器,您可以使用以下代码开始: //set

我正在使用Tomcat7.0开发一个Java应用程序(JSF2.0)。我每天都要在卡塔因时间发一封电子邮件。我将使用JavaMail发送电子邮件,但是如何让它每天在特定的时间发送电子邮件呢。比如说中午


非常感谢所有的帮助

最佳且灵活的解决方案是使用Quartz Scheduler。您只需按照指定的要求创建一个作业和一个触发器,就完成了

详情请参阅官方文件


您可以使用计时器任务

或石英调度器

您可以按照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();

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

使用标准API时,您可以在启动时使用来初始化调度程序,也可以作为调度程序使用

以下是一个启动示例:

@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.
    }

}
另见:

您有权访问服务器的cron调度程序吗?您可能想查看:Dimme,idk---planetJOnes,我将明确研究这个问题,谢谢使用crontab或调度程序我不希望在需要之前包含额外的程序我正在查看Quartz,谢谢!谢谢Balus,我一直很喜欢你的答案,因为你似乎总是给一点代码开始。我希望你不要把这看成是懒惰,只是我总是喜欢从一开始就做点什么。我感谢你的帮助。现在,我已经做到了,这正是我所需要的。它工作得很好,所以只要应用程序在服务器上运行,它就会一直工作,对吗?不客气。没错。