You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:25:31