如何在Umbraco 9中配置定时任务?需实现定时邮件功能
在Umbraco 9中配置定时邮件任务的实现方案
方案一:使用.NET后台托管服务(IHostedService)
这是适配Umbraco 9的通用自定义定时方案,基于.NET原生后台服务机制:
- 创建继承自
BackgroundService的类,重写ExecuteAsync方法封装邮件发送逻辑 - 在项目启动配置中注册该服务到依赖注入容器
示例代码:
public class EmailScheduledService : BackgroundService { private readonly ILogger<EmailScheduledService> _logger; private readonly IEmailSender _emailSender; // 自定义邮件发送服务 public EmailScheduledService(ILogger<EmailScheduledService> logger, IEmailSender emailSender) { _logger = logger; _emailSender = emailSender; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // 执行定时邮件发送逻辑 await _emailSender.SendScheduledEmailAsync(); _logger.LogInformation("定时邮件已发送,执行时间:{Time}", DateTimeOffset.Now); // 设置下次执行时间(示例:每天凌晨2点) var nextRun = DateTime.Today.AddDays(1).AddHours(2); var delay = nextRun - DateTime.Now; if (delay.TotalMilliseconds < 0) delay = delay.AddDays(1); await Task.Delay(delay, stoppingToken); } } }
注册服务(Program.cs):
builder.Services.AddHostedService<EmailScheduledService>();
方案二:使用Umbraco内置定时任务调度器
利用Umbraco 9提供的IScheduledTask接口,对接系统内置任务调度:
- 创建实现
IScheduledTask的任务类,定义执行逻辑和调度规则 - 在Umbraco启动配置中注册该任务
示例代码:
public class EmailScheduledTask : IScheduledTask { private readonly IEmailSender _emailSender; public EmailScheduledTask(IEmailSender emailSender) { _emailSender = emailSender; } public Task ExecuteAsync(CancellationToken cancellationToken) { return _emailSender.SendScheduledEmailAsync(); } public string Name => "定时邮件发送任务"; public string Alias => "emailScheduledTask"; public ScheduledTaskFrequency Frequency => ScheduledTaskFrequency.Daily; public TimeSpan Time => new TimeSpan(2, 0, 0); // 每天凌晨2点执行 }
注册任务(Program.cs的Umbraco配置段):
builder.Services.AddUmbraco(_env, _config) .AddBackOffice() .AddWebsite() .AddComposers() .AddScheduledTask<EmailScheduledTask>() // 注册定时任务 .Build();
关键注意事项
- 确保自定义
IEmailSender服务已正确配置SMTP或第三方邮件服务参数 - 定时任务依赖应用运行状态,若站点回收任务会暂停,建议以Windows服务/Linux守护进程方式部署
- 可通过Umbraco后台「设置 > 任务调度器」查看已注册的任务状态(部分版本支持)
内容的提问来源于stack exchange,提问作者Olabode Omotayo
相关产品推荐
相关产品推荐

