我正在开发 MVC .Net网络应用。我有一个数据库,其中我有一个名为Tasks的表,每个任务都与一个用户相关联,每个任务都有延迟。我希望自动发送电子邮件给与该任务相关联的用户,并在其到期日期前两天(例如)。
答案 0 :(得分:1)
您可以编写一个Windows服务应用程序或控制台应用程序,它将安排使用Windows计划程序定期运行(例如每天一次),它将查询您的数据库,提取符合所需条件的记录,是的,SmtpClient。
我之所以这样说,是因为您的网络应用程序不应该执行此任务。它应该由单独的应用程序执行。重复的后台任务(例如您需要执行的任务)在Web应用程序中是禁止的。哈克德讨论了为什么这是一个非常糟糕的主意:http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx
答案 1 :(得分:0)
小模拟示例:
DateTime today = DateTime.Now;
TimeSpan diff = user.Tasks.ExpirationDate.Subtract(today);
int dateDiff = Convert.ToInt32(diff.TotalDays);
if (dateDiff == 2)
{
//Send Email
}
然后,您可以将其放在mvc应用程序的Services/Email
文件夹中,并创建一个单独的控制台应用程序,以便每天请求页面,从而运行查询,例如:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("YOUR PAGE");
string response = new System.IO.StreamReader(req.GetResponse()
.GetResponseStream()).ReadToEnd();
您每天都会使用Windows Task Scheduler来运行控制台应用,这将启动控制台应用>控制台应用请求页面>页面检查任务的到期日期>发送电子邮件
答案 2 :(得分:0)
您应该使用Windows Task Scheduler来安排代码每隔几天运行一次