自动发送电子邮件

时间:2012-07-27 08:19:27

标签: c# asp.net-mvc database email razor

我正在开发 MVC .Net网络应用。我有一个数据库,其中我有一个名为Tasks的表,每个任务都与一个用户相关联,每个任务都有延迟。我希望自动发送电子邮件给与该任务相关联的用户,并在其到期日期前两天(例如)。

3 个答案:

答案 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来安排代码每隔几天运行一次