根据ASP.net中用户的设置发送定期邮件?

在我的网络应用程序中,我想根据自己选择的时间段为用户发送邮件。
例如: 1个HTML邮件每3天到用户01和1个HTML邮件每20天到用户02

我怎么能这样做? 任何资源? 我可以通过我的应用程序从我的Gmail帐户发送邮件到我的表中的任何邮件地址,但我不知道如何在一段时间内自动发送它。(我使用C#和SQL Express)
帮帮我!

我找到了解决方案。
根据我的搜索,我们有3种方法来处理:

  1. 使用SQL Server在一段时间内发送邮件通知。 (或这个 )
  2. 使用Windows服务和创建Timer对象并使用它检查时间。

但在方式1和方法2中我们应该访问服务器,我们需要专用的托管服务器,例如在其上安装WinService。 所以它在我们通常使用的共享主机空间中不起作用。 所以我找到了最好的方法,如你所见:

3. 使用ASP.NET缓存为计划作业模拟Windows服务。

上面的链接是一个很棒的解决方案。 因此,我们无需在Web应用程序外部工作。

您将需要能够定期为您运行作业的内容,例如cron守护程序或Windows任务调度程序。

基本上,您可以定期开始工作,并执行您需要的任何邮件处理。

如果您可以创建一个基本睡眠的窗口服务,直到需要发送下一批邮件,您也可以从代码执行此操作。

最简单的方法是编写任务调度程序或cron作业以定期运行。 通过这种方式,您只需要一小段代码来处理邮件发送部分,然后您只需将其安排为每小时或每天运行一次或任何需要的内容。

海,

看看quartz.net

Quartz.NET是一个function齐全的开源作业调度系统 ,可用于从最小的应用程序到大型企业系统。

Quartz.NET是一个非常有道理的开源Java作业调度框架Quartz。 Quartz.NET支持开箱即用的集群和数据库持久性,并且具有使用cron表达式,间隔触发器和排除建议来调度作业的强大方法。

IIS托管ASP.NET的好处是IIS(默认情况下)会根据应用程序池本身的设置定期回收您的应用程序池。

当您的应用程序池启动时(可能每天至少一次,特别是如果它允许空闲,即大多数活动为9-5的业务应用程序),则会触发Global.asax中的Application_Start事件处理程序。 这可以用于您的重复任务。

现在你不一定要在Application_Start处理程序中同步运行这个电子邮件发送,因为对我而言,这个消息传递function似乎不是启动的核心,但无论如何都要使用这个事件处理程序作为定期执行内务管理的简单方法。

要发送异步,您应该使用异步委托。

我认为有一个解决方案:

1-如果您有一个用户表,则必须在sql db的user表中添加2列,并在第一列中添加上次发送给用户的电子邮件的日期,第二列包含发送电子邮件的时间段该用户为ex:LastEmailSentDate datetime SendEmailPeriod int

2-在您的应用程序代码中编写一个函数,将上次发送的电子邮件的最后日期与发送电子邮件的时间段进行比较。

//这里是function代码

 public void CompareLastSentDate() { // lets assume that you bring the data for the db using Sqdatareader reader //get the field from the LastEmailSentDate field in the database as i mention before DateTime LastEmailSentDate = Convert.ToDate(reader["DatePeriod"]) // get the field from the SendEmailPeriod of the user field from database int sendEmailPeriod = Convert.Toint32(reader["SendEmailPeriod"]) // now you have the date before the period of day ex: before 3 days depend on user DateTime DatePeriod = new DateTime(DateTime.Now.Year, DateTime.Now.Month, (DateTime.Now.Day - sendEmailPeriod )); // if the last email send is before period of day that mean u have to send an email again if(LastEmailSentDate.Day <= DatePeriod.Day) { // sent the email to the user } } 

注意:现在你可以在用户之间循环并发送电子邮件

你可以通过从你的应用程序主页Page_Load事件调用它来一天调用一次这个函数,并在当天的第一次调用后添加一个应用程序[“LastFunctionCallDate”] = DateTime.Now标志,所以在下一个你可以检查这个标志,如果它==今天如果不再调用它