如何在 ASP.NET Core 中自动发送电子邮件触发器



我的Web应用程序需要在特定时间发送电子邮件,我已经完成了其他部分,例如从SQL Server获取数据并通过电子邮件发送数据,但下一步是自动将其自动化为每天在特定时间发送电子邮件(例如太平洋标准时间凌晨5点(。在 ASP.NET Core Web 应用程序中,是否可以每天自动调用操作方法,而无需我们手动单击按钮或触发事件?

感谢您分享您的知识。

你可以像这样使用IHostedService:

public class TimedHostedService : IHostedService, IDisposable
{
private Timer _timer;
public TimedHostedService()
{
//Some DI here...
}
public Task StartAsync(CancellationToken stoppingToken)
{
//this will trigger DoWork every minute
_timer = new Timer(DoWork, null, TimeSpan.Zero, 
TimeSpan.FromMinutes(1));
return Task.CompletedTask;
}
private void DoWork(object state)
{
//Every time when DoWork is triggered you can check time that you need
var start = new TimeSpan(15, 0, 0);
var end = new TimeSpan(15, 0, 59);
var now = DateTime.Now.TimeOfDay;
if(start <= now && end <= now)
{
//send emails
}
}
public Task StopAsync(CancellationToken stoppingToken)
{
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}

您可以在此处找到有关它的更多信息:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio

密切注意这一点:

计时器不会等待先前的 DoWork 执行完成,因此显示的方法可能并不适合每种方案。

您只需要发送一次电子邮件,因此在DoWork中相应地调整计时器间隔和时间检查非常重要,这样您就不会发送电子邮件两次。

最新更新