链接到System.Timers.Timer的方法的问题反复发送电子邮件

时间:2012-02-23 13:03:26

标签: asp.net

我创建了一个不断发送电子邮件的ASP.Net邮件传递应用程序。即使重新启动计算机,此行为仍会存在。

我正在使用的代码如下:

          public void  SendScheduleMail()
          {
              System.Timers.Timer myTimer = new System.Timers.Timer();
                myTimer.Interval =20000;
                myTimer.AutoReset = true;
                myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
                myTimer.Enabled = true;                   
          }

          public void myTimer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
          {
              SmtpClient smtp = new SmtpClient("smtp.xxx.com", 587);

              MailMessage message = new MailMessage();

              //password required////////////////////
              smtp.Credentials = new System.Net.NetworkCredential(tb_uname.Text, tb_pass.Text);
              message.From = new MailAddress("my email ID");
              message.To.Add(new MailAddress(tb_to.Text));

              message.CC.Add(tb_cc.Text);
              message.Bcc.Add(tb_bcc.Text);

              message.Subject = tb_sub.Text;
              message.Body = tb_body.Text;
              message.IsBodyHtml = false;


              smtp.EnableSsl = true;
              smtp.Send(message); 

          }

4 个答案:

答案 0 :(得分:1)

您指定myTimer.Enabled = true每隔一段时间发起一次发送 - 您需要指定myTimer.Enabled = false以阻止定时器勾选,从而发送电子邮件。

但奇怪的是,你在提升事件的时间间隔之前可能会处置Timer

答案 1 :(得分:1)

计时器设置为目前每20秒运行一次myTimer_Elapsed。这应该是它正在做的事情。

根据上下文,代码应该在重新启动时停止发送邮件,如果它只是一个应用程序,但如果它作为服务安装,它可能会在重新启动后再次启动。

此外,根据您的邮件服务器的速度,您可能会发现自己正在处理积压的邮件,这些邮件将在程序关闭后继续提供。重要的是要区分它是继续发送还是继续接收邮件。

最后多次调用SendScheduleMail看起来会设置多个计时器,因此您可能处于设置多个这些调用的状态......

在不了解更多关于意图的情况下,很难再对程序设计有所了解,但可能会根据您实际尝试的内容进行改进。

答案 2 :(得分:0)

它没有停止的原因很可能是因为它在关闭应用程序/重新启动机器之前已经解雇了很多事件。

我不完全确定为什么你使用计时器,但这是你的问题,它会反复触发,直到你停止你从未做过的计时器。

答案 3 :(得分:-1)

为什么不使用Tread.Sleep方法?