我创建了一个不断发送电子邮件的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);
}
答案 0 :(得分:1)
您指定myTimer.Enabled = true
每隔一段时间发起一次发送 - 您需要指定myTimer.Enabled = false
以阻止定时器勾选,从而发送电子邮件。
但奇怪的是,你在提升事件的时间间隔之前可能会处置Timer
。
答案 1 :(得分:1)
计时器设置为目前每20秒运行一次myTimer_Elapsed
。这应该是它正在做的事情。
根据上下文,代码应该在重新启动时停止发送邮件,如果它只是一个应用程序,但如果它作为服务安装,它可能会在重新启动后再次启动。
此外,根据您的邮件服务器的速度,您可能会发现自己正在处理积压的邮件,这些邮件将在程序关闭后继续提供。重要的是要区分它是继续发送还是继续接收邮件。
最后多次调用SendScheduleMail看起来会设置多个计时器,因此您可能处于设置多个这些调用的状态......
在不了解更多关于意图的情况下,很难再对程序设计有所了解,但可能会根据您实际尝试的内容进行改进。
答案 2 :(得分:0)
它没有停止的原因很可能是因为它在关闭应用程序/重新启动机器之前已经解雇了很多事件。
我不完全确定为什么你使用计时器,但这是你的问题,它会反复触发,直到你停止你从未做过的计时器。
答案 3 :(得分:-1)
为什么不使用Tread.Sleep方法?