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

时间:2016-07-12 13:33:53

标签: asp.net vb.net email

使用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次后会话变量将与case语句匹配但我需要它发送电子邮件,直到有人解决了错误,我不想硬编码每次递增60的数字列表在案例陈述中。

2 个答案:

答案 0 :(得分:0)

有关案件陈述的信息,请参阅https://msdn.microsoft.com/en-us/library/cy37t14y.aspx

请参阅working with SELECT CASE and MOD,了解使用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

答案 1 :(得分:0)

您可以使用Mod运算符除以60分钟并获得余数,因此您无需检查60,120,180等。

Mod上的

MSDN documentation

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