2012-07-27 146 views
1

我工作的MVC .NET Web应用程序。我有一个数据库,其中有一个名为Tasks的表,每个任务都与一个用户关联,每个任务都有一个延迟。我想自动发送电子邮件向谁任务之前,其截止日期初二(例如)相关联的用户。发送电子邮件自动

回答

1

你可以写一个Windows服务应用程序,或者将其安排在使用Windows调度程序(例如每天一次)定期运行一个控制台应用程序,它会查询数据库,提取符合要求条件的记录和,是的,SmtpClient

我之所以这样说,是因为这个任务不应该由你的web应用程序来完成。它应该由一个单独的应用程序执行。重复出现的后台任务(例如您需要执行的后台任务)是Web应用程序中的禁忌。该Haacked讨论为什么这是一个非常糟糕的主意:http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

0

小模拟了例如:

DateTime today = DateTime.Now; 
TimeSpan diff = user.Tasks.ExpirationDate.Subtract(today); 
int dateDiff = Convert.ToInt32(diff.TotalDays); 

if (dateDiff == 2) 
{ 
    //Send Email 
} 

然后,您可以把这个在Services/Email文件夹在你的MVC应用程序,并创建一个单独的控制台应用请求的页面日常生活,因此运行查询,如:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("YOUR PAGE"); 
     string response = new System.IO.StreamReader(req.GetResponse() 
      .GetResponseStream()).ReadToEnd(); 

你会使用Windows Task Scheduler天天跑的控制台应用程序,这将启动控制台应用程序>控制台应用程序请求页>页检查到期日期的任务>发送电子邮件