Asp.net 每小时发送一次电子邮件,即使页面每分钟刷新一次

Asp.net 每小时发送一次电子邮件,即使页面每分钟刷新一次,asp.net,vb.net,email,Asp.net,Vb.net,Email,使用VB.net和VS 2015创建asp.net网站 我有一个每分钟自动刷新的网页,它显示了几个项目的状态。如果发现错误,我希望能够每60分钟从该页面发送一封电子邮件。我希望只使用站点中的代码,但如果需要,我可以访问sql server 2012来创建数据库 我认为最好的方法是,如果页面出现错误,调用子例程发送电子邮件。就目前情况而言,这种情况每时每刻都会发生,令人恼火。我认为最好的方法是使用会话变量,但我无法确定如何每60分钟发送一次电子邮件,然后在错误不再出现时停止,并将时间重置为0 下面

使用VB.net和VS 2015创建asp.net网站

我有一个每分钟自动刷新的网页,它显示了几个项目的状态。如果发现错误,我希望能够每60分钟从该页面发送一封电子邮件。我希望只使用站点中的代码,但如果需要,我可以访问sql server 2012来创建数据库

我认为最好的方法是,如果页面出现错误,调用子例程发送电子邮件。就目前情况而言,这种情况每时每刻都会发生,令人恼火。我认为最好的方法是使用会话变量,但我无法确定如何每60分钟发送一次电子邮件,然后在错误不再出现时停止,并将时间重置为0

下面的代码显示了到目前为止我所拥有的。这是由一个检查错误的case语句包装的

'checks to see if email needs to be sent
Select Case Session("sendEmail")
    Case Nothing, 60, 120, 180
        'send email
    Case Else
        'do nothing
End Select

Session("sendEmail") = Session("sendEmail") + 1
这应该与页面刷新60次后一样,会话变量将匹配案例陈述,但我需要它来发送电子邮件,直到有人解决了错误,我不想在案例陈述中硬编码每次递增60的数字列表。

有关案例陈述的信息,请参阅

有关使用mod的案例说明,请参阅

Dim number As Integer
number = 180
Dim remainder As Integer
remainder = number Mod 60
'checks to see if email needs to be sent
Select Case remainder
    Case 0
        Console.WriteLine("divisible by 60")
    Case Else
        Console.WriteLine("not divisible by 60")
End Select

您可以使用
Mod
操作符除以60分钟,得到余数,因此无需检查60、120、180等

在国防部


每分钟使用一个列表将错误存储在会话变量中。在Page|u Load中,调用一个方法来检查小时标记是否已达到,例如DateTime.Now.hour==1 | | DateTime.Now.hour==2 | | DateTime.Now.hour==3等等。。。如果是,请阅读错误并发送电子邮件。错误修复后,从列表中删除该项目并将其重新分配给会话。@Silentbob很抱歉最初误读了您的问题,我刚刚更新了我的答案。
Dim minutes as Integer 

If Not Session("sendEmail") Is Nothing Then
    minutes = TryCast(Session("sendEmail"), Integer)
Else
    minutes = 0
End If

'checks to see if email needs to be sent
If (minutes Mod 60) > 1
   'send email
   minutes = 0 ' reset counter
Else
   minutes = minutes + 1
End If

Session("sendEmail") = minutes