1

我正在开发一个MVC .Net Web 应用程序。我有一个数据库,其中有一个名为 Tasks 的表,每个任务都与一个用户相关联,每个任务都有延迟。我想在任务到期后两天(例如)之前自动向与任务关联的用户发送电子邮件。

4

3 回答 3

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

于 2012-07-27T08:22:51.697 回答
1

您可以使用 Windows 服务自动发送电子邮件。

请参考以下链接

http://www.dotnetfunda.com/articles/article931-how-to-send-mail-automatically-for-every-five-minutes-using-csharp.aspx

您可以使用您的逻辑将计时器设置为 2 天。

于 2012-07-27T08:25:05.937 回答
0

小模型示例:

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

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

然后,您可以将其放在Services/Emailmvc 应用程序的文件夹中,并创建一个单独的控制台应用程序来每天请求页面,因此运行查询,例如:

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

您将使用 Windows 任务计划程序每天运行控制台应用程序,这将启动控制台应用程序 > 控制台应用程序请求页面 > 页面检查任务的到期日期 > 发送电子邮件

于 2012-07-27T08:37:11.367 回答