【问题标题】:Send Daily Mail to user at 12:00 AM using ASP.NET使用 ASP.NET 在凌晨 12:00 向用户发送每日邮件
【发布时间】:2015-12-14 06:03:38
【问题描述】:

我有将每日邮件发送到到期邮件给用户的完整代码。我对代码的描述如下:

Global.asax:

void Application_Start(对象发送者,EventArgs e) {
    System.Timers.Timer myTimer = new System.Timers.Timer();        
    double inter = (double)GetNextInterval();        
    myTimer.Interval = inter;        
    myTimer.AutoReset = true;
    myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
    myTimer.Enabled = true; 
}

私有双 GetNextInterval(){

    string timeString;
    timeString = "12:00 AM";
    DateTime t = DateTime.Parse(timeString);
    TimeSpan ts = new TimeSpan();
    int x;
    ts = t - System.DateTime.Now;
    if (ts.TotalMilliseconds < 0)
    {
        ts = t.AddDays(1) - System.DateTime.Now;
    }
    return ts.TotalMilliseconds;
}

public void myTimer_Elapsed(对象源,System.Timers.ElapsedEventArgs e) {

// My Mail Code }

此代码适用于第一次邮件,但我想每天发送邮件。

怎么可能?

【问题讨论】:

  • 你可以使用Windows服务..
  • 不,我只使用这个代码
  • 您的 GetNextInterval() 方法根据应用程序启动时间返回间隔
  • 我的建议是创建 Windows 服务或控制台应用程序并在服务器中运行。
  • 在 IIS 进程上运行计时器的一个挑战是 IIS 进程必须不断被戳。在一个非常活跃的站点上,这不是问题。不断的网络请求将使您的流程保持活力。如果这是一个公司 Intranet 站点,当午夜临近时,可能有几个小时没有任何活动,并且您的 IIS 进程早已关闭。这可以通过采用一些人为的策略来保持您的 IIS 进程处于活动状态来轻松解决。

标签: c# asp.net sendmail


【解决方案1】:

创建一个发送电子邮件的控制台应用程序,并安排一个任务以使用任务调度程序每天运行您的控制台应用程序。

【讨论】:

  • 我认为您必须添加更多关于为什么推荐控制台应用程序的详细信息,因为我认为 OP 不知道为什么 IIS 托管的 Web 应用程序不能派上用场这个案例。
  • ok 1. 完成任务很简单。 2. 只有当用户通过应用程序时,Web 应用程序上的代码才会执行​​。
  • @BudaGavril 是对的,实现您的任务的最佳方式是创建一个控制台应用程序,它可以安装在您的应用程序所在的同一台机器上。要创建此服务,我建议您使用 TopShelf
  • @PedroBenevides 如果一个服务被创建,它会自动启动并消耗 ram 和 cpu(即使运行该服务所需的资源量并不大),但任务调度程序服务正在运行并且用于发送电子邮件的资源仅在控制台应用启动时使用一次
【解决方案2】:

您也可以为 .aspx 文件创建计划任务。它将打开一个浏览器并发送邮件,而不是你必须创建另一个计划任务来关闭它。

这里是例子:

https://mohammednv.wordpress.com/2008/01/08/how-to-create-scheduled-tasks-for-aspx-files/

【讨论】:

    【解决方案3】:

    您可以使用Quartz.NET 在代码端安排任何程序

    但是有一个问题。如果一个 asp.net 应用程序保持非活动状态(未接收任何请求),它将从 IIS 进入睡眠状态。

    所以你有两个选择。 Change IIS Settings 让您的应用程序池始终处于唤醒状态 或poke your application with dummy requests 使用任何方法来防止它休眠

    我的建议和实施如下,我认为是最专业的方式。

    将您的及时任务公开为 wcf 服务。

    开发一个运行 Quartz 并及时调用这些 wcf 服务的 Windows 服务。

    优点是您可以将业务逻辑代码保存在一个地方,并且它也适用于服务器场场景

    【讨论】:

      猜你喜欢
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2020-06-26
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多