Quartz.NET浅谈一 : 简单使用(定时发送QQ邮件)

时间:2022-09-24 13:06:35

Quartz.NET是一个全功能的开源作业调度系统,可用于从最小的应用程序到大型企业系统。

Quartz.NET浅谈一 : 简单使用(定时发送QQ邮件)直接上代码吧。。。

一、新建一个控制台项目

       略过

二、安装Nuget包

  Quartz.NET浅谈一 : 简单使用(定时发送QQ邮件)

 

三、创建发送邮箱辅助工具类

 

    static class EmailHelper
    {
        public static void SendEmail(Email email)
        {
            try
            {
                // 邮件类。
                MailMessage mailMessage = new MailMessage();

                // 发件人邮箱
                mailMessage.From = new MailAddress(email.addFrom);

                // 收件人邮箱
                mailMessage.To.Add(new MailAddress(email.addTo));

                // 邮件标题。
                mailMessage.Subject = email.subject;

                // 邮件内容。
                mailMessage.Body = email.body;

                #region 配置客户端信息
                // 客户端
                SmtpClient client = new SmtpClient();

                // smtp.qq.com 默认QQ邮箱
                if (string.IsNullOrEmpty(email.host))
                {
                    client.Host = "smtp.qq.com";
                }
                else
                {
                    client.Host = email.host;
                }

                // 邮件服务器端口
                client.Port = 25;

                // 使用安全加密连接。
                client.EnableSsl = true;
                client.UseDefaultCredentials = false;

                // 发件人的邮箱,自己邮箱里的生成授权码 (使用第三方发送qq邮件需要授权码)
                client.Credentials = new NetworkCredential(email.addFrom, "自己的授权码");
                #endregion

                //发送
                client.Send(mailMessage);

                Console.WriteLine("发送成功 !");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }

 

四、创建Job调度器

CronTrigger触发器公式参考  https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html

    public class SchedulerHelper
    {
        IScheduler scheduler;
        ISchedulerFactory factory;

        public void StartScheduler(IJobDetail job = null, ITrigger trigger = null)
        {
            // 创建一个调度器
            factory = new StdSchedulerFactory();
            scheduler = factory.GetScheduler().Result;
            scheduler.Start();

            // 创建一个执行任务
            if (job == null)
            {
                job = JobBuilder.Create<DemoJob>().WithIdentity("job1", "group1").Build();
            }

            // 创建一个触发器 SimpleTrigger和CronTrigger
            // 需要在给定的时间和重复次数执行一个作业,使用SimpleTrigger
            // 有许多复杂的作业调度,使用CronTrigger,CronTrigger是基于Unix克隆表达式的。

            // SimpleTrigger
            //DateTimeOffset simpleRunTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
            //if (trigger == null)
            //{
            //    trigger = TriggerBuilder.Create()
            //    .WithIdentity("trigger1", "group1")
            //    .StartAt(simpleRunTime)
            //    .Build();
            //}

            // CronTrigger
            if (trigger == null)
            {
                trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .WithCronSchedule("0/10 * * * * ?")      // 每10秒执行一次
                .Build();
            }

            // 将任务与触发器注册到调度器中
            scheduler.ScheduleJob(job, trigger);

            // 执行
            scheduler.Start();
        }

        public void ShutDownScheduler()
        {
            // 关闭
            if (scheduler != null)
            {
                scheduler.Shutdown(true);
            }
        }

    }

 

五、创建Job

  实现job的Execute方法,该方法中执行具体的操作。

class DemoJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
            CheckWorkRec.CheckData();
            sw.Stop();
            Console.WriteLine("Stopwatch总共花费{0}ms.", sw.Elapsed.TotalMilliseconds);
            return null;
        }
    }

   通过检查数据库,判断出异常数据,发送邮件进行提醒。

Quartz.NET浅谈一 : 简单使用(定时发送QQ邮件)

 

六、执行Job

 

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("正在等待调度Job ..... ");
            // 开启JOB
            new SchedulerHelper().StartScheduler();
            Console.ReadKey();
        }
    }

七、执行结果

Quartz.NET浅谈一 : 简单使用(定时发送QQ邮件)

Quartz.NET浅谈一 : 简单使用(定时发送QQ邮件)