一、功能简介

用户购买物品生成订单后,系统将发送邮件提醒给用户

二、操作步骤

  1. 后台配置一个系统的默认发送邮箱
  2. 启动定时任务,这里包括多个任务,只需要启动邮件任务
  3. 查看邮件发送情况

三、数据库分析

  1. [dbo].[Log] 系统日志表,可查看邮件发送失败的异常信息
  2. [dbo].[EmailAccount] 系统发送邮件配置表
  3. [dbo].[QueuedEmail] 订单邮件序列表,[SentTries]为重试次数,默认尝试3次失败后不再发送。
  4. [dbo].[ScheduleTask] 定时任务信息表,存储定时任务信息。

四、源码解析

  1. 根据MVC命名规则,可定位到Nop.Admin.Controllers命名空间,
  2. 查看ScheduleTaskController的RunNow方法,可跟踪查看到任务调用机制。
    1. 通过反射类型,采用autofac实例化对象,然后执行。
    2. 任务实现Nop.Services.Tasks.ITask接口的Execute()方法,如Nop.Services.Messages.QueuedMessagesSendTask。
 1         private ITask CreateTask(ILifetimeScope scope)
 2         {
 3             ITask task = null;
 4             if (this.Enabled)
 5             {
 6                 var type2 = System.Type.GetType(this.Type);
 7                 if (type2 != null)
 8                 {
 9                     object instance;
10                     if (!EngineContext.Current.ContainerManager.TryResolve(type2, scope, out instance))
11                     {
12                         //not resolved
13                         instance = EngineContext.Current.ContainerManager.ResolveUnregistered(type2, scope);
14                     }
15                     task = instance as ITask;
16                 }
17             }
18             return task;
19         }

 1         /// <summary>
 2         /// Executes the task
 3         /// </summary>
 4         /// <param name="throwException">A value indicating whether exception should be thrown if some error happens</param>
 5         /// <param name="dispose">A value indicating whether all instances should be disposed after task run</param>
 6         /// <param name="ensureRunOnOneWebFarmInstance">A value indicating whether we should ensure this task is run on one farm node at a time</param>
 7         public void Execute(bool throwException = false, bool dispose = true, bool ensureRunOnOneWebFarmInstance = true)
 8         {
 9             ...
10                 //initialize and execute 初始化成功后执行任务
11                 var task = this.CreateTask(scope);
12                 if (task != null)
13                 {
14                     this.LastStartUtc = DateTime.UtcNow;
15                     if (scheduleTask != null)
16                     {
17                         //update appropriate datetime properties
18                         scheduleTask.LastStartUtc = this.LastStartUtc;
19                         scheduleTaskService.UpdateTask(scheduleTask);
20                     }
21                     task.Execute();
22                     this.LastEndUtc = this.LastSuccessUtc = DateTime.UtcNow;
23                 }
24             }
25             catch (Exception exc)
26             {
27                 this.Enabled = !this.StopOnError;
28                 this.LastEndUtc = DateTime.UtcNow;
29
30                 //log error
31                 var logger = EngineContext.Current.ContainerManager.Resolve<ILogger>("", scope);
32                 logger.Error(string.Format("Error while running the '{0}' schedule task. {1}", this.Name, exc.Message), exc);
33                 if (throwException)
34                     throw;
35             }
36
37             if (scheduleTask != null)
38             {
39                 //update appropriate datetime properties
40                 scheduleTask.LastEndUtc = this.LastEndUtc;
41                 scheduleTask.LastSuccessUtc = this.LastSuccessUtc;
42                 scheduleTaskService.UpdateTask(scheduleTask);
43             }
44
45             //dispose all resources
46             if (dispose)
47             {
48                 scope.Dispose();
49             }
50         }

五、技术解析

  1. Autofac的依赖注入
  2. 反射

转载于:https://www.cnblogs.com/devilsky/p/5337285.html

我的NopCommerce之旅(4): 定时任务之邮件相关推荐

  1. Jenkins+Jmeter持续集成笔记(四:定时任务和邮件通知)

    通过前几篇文章,jmeter+ant+jenkins自动化持续构建的测试平台基本成型.既然要自动化平台,最基本的肯定要实现不经过人工干预,平台会在特定的条件下自动运行测试脚本,并在脚本运行结束后,发送 ...

  2. SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)

    SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊) 目录 SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊) 1.概述 2.最佳实践 2.1创建项目引入依赖(mail) ...

  3. Django实现定时任务和邮件发送(含各种附件)功能

    文本初衷是为了实现在 Django 项目中设置定时任务,通过定时任务备份数据并发送到指定的邮箱中. 先来看一下最终的效果 文章目录 settings.py 邮箱配置 定时任务配置 定时任务邮件功能 发 ...

  4. springboot的应用(springboot+定时任务+发邮件)

    1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写了一个方法,注解里cron里面的很多星星意思是:每个月.周一到周日 .每个 ...

  5. 带着新人学springboot的应用10(springboot+定时任务+发邮件)

    接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件. 1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写 ...

  6. linux创建定时任务发邮件

    1.首先安装mutt 和sendmail [root@smp ~]$yum -y install sendmail mutt mailx 2.配置发邮件的邮箱 [root@smp ~]$vim /et ...

  7. Linux基础(九)--定时任务

    本文主要介绍了Linux中定时任务的相关知识. 在日常中,有一些任务需要定时执行,例如:每天定时更新杀毒软件的数据库,每天定时执行数据清洗等脚本.这里就需要做定时任务. (1)概述 在Linux中定时 ...

  8. crontab定时任务不执行,并且没有收到错误信息邮件

    现象: crontab中定义的msqldump定时任务不能执行,没有收到错误信息邮件,查看日志/var/log/cron显示如下 CROND[15777]: (root) MAIL (mailed 3 ...

  9. 三种任务(异步任务、邮件任务、定时任务)

    异步任务  引入   在实际应用中,常常会使用到异步任务.比如发送邮件的时候,后台需要一段时间去发送,而前台这边需要等后台响应结束后才能进行下一步,这种问题一般使用多线程就能解决.   开启异步任务的 ...

最新文章

  1. C 把两个bitmap文件合并成一个bitmap文件
  2. 这就是爱?英特尔处理器将整合AMD HBM2 GPU
  3. 向量召回 MIND多兴趣双塔模型
  4. HttpServletRequest中getAttribute()和getParameter()的区别
  5. getParameterValues用法
  6. Linux 光盘 远程拷贝,Linux远程拷贝scp命令
  7. Unity3D 4.x怎样实现动画的Ping Pong效果
  8. 微信开发者工具不显示二维码问题
  9. 机器学习算法思想简单梳理
  10. Redis与Mysql双写一致性方案解析
  11. 文献阅读笔记【10】:基于小尺度分形维数的裂缝图像分割方法
  12. 组合优化问题的典型事例
  13. JFianl项目中Controller层方法不进行权限校验-可以添加注解@UnCheck
  14. 火车头采集器采集教程
  15. 让你的编程不再乏味:「陪伴姬」来了!
  16. C/C++动态开辟数组【C++:new/delete(推荐):int *arr = new int[m];】【C++:vector】【C:malloc() free()】
  17. 医学院校教师备课系统的信息安全性研究
  18. 【LaTex】三线表加粗
  19. HDU 幸福列车 优先队列
  20. 学计算机买笔记本是i5 i7,对我们普通人买电脑来说,i7和i5、i3有多大区别,玩游戏选哪款好?!...

热门文章

  1. 单条MySQL最长_MySQL 单条记录长度最大65535
  2. react native text换行_基于React+Koa实现React SSR服务端渲染
  3. Java笔记-解决Cause: java.sql.SQLException: 试图在只读事务中修改数据(达梦数据库)
  4. Arduino笔记-定时器中断(MsTimer2库使用)
  5. Qt工作笔记-在ListWidget中多线程检索数据
  6. 反恐精英起源服务器文件在哪,反恐精英:起源人物模型放哪里
  7. 802.11 n wlan linux驱动下载,802.11n无线网卡驱动
  8. python做统计_利用 Python 进行统计
  9. html遮罩层模态提示,页面遮罩层,并且阻止页面body滚动。bootstrap模态框原理,.bootstrap模态...
  10. 微信小程序上传大于4m_微信定制小程序开发