你尝试过吗quartz.net 教程 http://quartznet.sourceforge.net/tutorial/index.html?
由于您的 Web 应用程序可能会被回收/重新启动,因此您可能应该(重新)初始化 global.asax.cs 中的 Application_Start 处理程序中的quartz.net 调度程序。
Update(带有完整的示例和一些其他注意事项):
以下是如何使用quartz.net 执行此操作的完整示例。首先,你必须创建一个类来实现IJob
由quartz.net定义的接口。此类由quartz.net 调度程序在配置的时间调用,因此应包含您的发送邮件功能:
using Quartz;
public class SendMailJob : IJob
{
public void Execute(JobExecutionContext context)
{
SendMail();
}
private void SendMail()
{
// put your send mail logic here
}
}
接下来,您必须初始化quartz.net 调度程序,以便每天在 06:00 调用您的作业一次。这可以在以下位置完成Application_Start
of global.asax
:
using Quartz;
using Quartz.Impl;
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();
// construct job info
JobDetail jobDetail = new JobDetail("mySendMailJob", typeof(SendMailJob));
// fire every day at 06:00
Trigger trigger = TriggerUtils.MakeDailyTrigger(06, 00);
trigger.Name = "mySendMailTrigger";
// schedule the job for execution
sched.ScheduleJob(jobDetail, trigger);
}
...
}
就是这样。您的作业应在每天 06:00 执行。为了进行测试,您可以创建一个每分钟触发一次的触发器(例如)。看看方法TriggerUtils
.
虽然上述解决方案可能适合您,但您应该考虑一件事:如果一段时间没有活动(即没有活跃用户),您的网络应用程序将被回收/停止。这意味着您的发送邮件功能可能不会被执行(仅当在应该发送邮件的时间附近有一些活动时)。
因此,您应该考虑其他解决方案来解决您的问题:
- 您可能想要实现一个 Windows 服务来发送电子邮件(Windows 服务将始终运行)
- 或者更简单:在小型控制台应用程序中实现发送邮件功能,并在 Windows 中设置计划任务,以便每天在所需时间调用控制台应用程序一次。