c#规范发送的电子邮件数量

本文关键字:电子邮件 范发送 | 更新日期: 2023-09-27 18:10:03

我想知道是否有人知道一个好方法来规范通过c#发送多少电子邮件?

这是我的方案。我有一个windows服务,它监视其他三个windows服务。我使用一个服务控制器来获取所有3个服务的状态,如果其中任何一个服务的状态变为已停止,它将发送一封电子邮件。我的问题是,我在60秒计时器上运行这个,所以它每60秒发送一封电子邮件,直到有人启动服务备份。

我的第一个想法是,当发送第一封电子邮件时,创建一个文本文件并使用计数器对其进行编号。当counter <所以我最多只能收到5封邮件。我认为这将工作,但它似乎有点傻。>

有人有替代方案吗?或者我应该按照我的第一个想法执行清理文件?

谢谢

编辑:我试图限制发送电子邮件的数量的原因是因为收到这些电子邮件的人不会很快做出反应。与此同时,那些处理Exchange的人不希望该服务向人们发送垃圾邮件。我觉得5美元就足够让双方都满意了。

c#规范发送的电子邮件数量

我建议您跟踪每个服务的停机时间。

每隔60秒检查一次,如果服务关闭,存储服务关闭的DateTime。在接下来的60秒间隔中,您可以检查服务是否已经关闭。也就是说,你可以判断服务是刚刚下线还是已经下线一段时间了。您还可以添加另一个标志来确定上次检查是UP还是DOWN。

然后,当程序第一次发现服务关闭时,它可以发送电子邮件。一旦服务恢复,它可以重置这个标志值,以便下一次停机时它知道发送新电子邮件。

如果需要的话,你也可以使用这些标志来延迟邮件的频率。只需为LastEmailSentTime添加一个新的DateTime字段,并将其与您想要的错误邮件间隔(例如10分钟)进行比较

希望能给你一些启发

编辑:Some Sample…

bool ServiceWasDown = false;
DateTime ServiceDownTime = DateTime.Now;
DateTime LastEmailTime = DateTime.Now;
void OnTimerElapsed()
{
   if(IsServiceDown())
      ServiceDown();
   else
      ServiceUp();
}
void ServiceDown()
{
   if(ServiceWasDown)//already know about service
   {
      //if LastEmailTime more than 10 minutes ago send another email and update LastEmailTime
   }
   else//service just went down
   {
      //send new email
      LastEmailTime = DateTime.Now;
      ServiceWasDown = true;
      ServiceDownTime = DateTime.Now;
   }   
}
void ServiceUp()
{
   ServiceWasDown = false;   
}

如果你使用system . timer . timer,那么你可以添加一个int变量来计算经过的事件。