使用windows服务定时发送email核心代码
public partial class Service1 : ServiceBase
{
private Thread _thread;
private bool StopThreads = false;
private bool HasSentMail = false;
public Service1()
{
InitializeComponent();
try
{
_thread = new Thread(new ThreadStart(sendmail));
}
catch (Exception e)
{ }
}
protected override void OnStart(string[] args)
{
_thread.Start();
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
StopThreads = true;
RunLog.WriteLog("Service stop at:");
}
private void sendmail()
{
RunLog.WriteLog("Service start at:");
while (!StopThreads)
{
if (DateTime.Now.Day==28 && DateTime.Now.Hour==9 && DateTime.Now.Minute<=10 && HasSentMail==false)
{
MailMessage mm;
mm = new MailMessage();
StringBuilder ensb = new StringBuilder();
StringBuilder cnsb = new StringBuilder();
mm.From = new MailAddress("abc@domain.com");
mm.Subject = "Test";
mm.BodyEncoding = System.Text.Encoding.UTF8;
mm.BodyEncoding =Encoding.UTF8;
mm.IsBodyHtml=true;
DataSet ds = sgbox_namelistDac.GetList();
SmtpClient sc = new SmtpClient("smtp.domain.com");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
mm.Body = "<htmp><body><font size=2 face='Arial, Helvetica, sans-serif'>Dear Supplier </font>" + ensb.ToString() + "<font size=2 face='Arial, Helvetica, sans-serif'>尊敬的供应商 " + cnsb.ToString();
mm.To.Clear();
mm.To.Add(new MailAddress(ds.Tables[0].Rows[i]["email"].ToString().Trim()));
try
{
sc.Send(mm);
RunLog.WriteLog("Sent at:");
}
catch (Exception e)
{
RunLog.WriteLog("SMTP发送失败:" + e.Message);
return;
}
Thread.Sleep(3000);
}
HasSentMail = true;
}
else
{
HasSentMail = false;
}
Thread.Sleep(600000);
}
}
}
相关文章
- C# 9.0 终于来了, Top-level programs 和 Partial Methods 两大新特性探究
- Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】
- Newtonsoft 六个超简单又实用的特性,值得一试 【上篇】
- HashSet扩容机制在时间和空间上的浪费,远大于你的想象
- foreach 集合又抛经典异常了,这次一定要刨根问底
- C#9.0 终于来了,带你一起解读 nint 和 Pattern matching 两大新特性玩法
- C#9.0 终于来了,您还学的动吗? 带上VS一起解读吧!(应该是全网第一篇)
- MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试
- 字符串太占内存了,我想了各种奇思淫巧对它进行压缩
- MySql轻松入门系列——第一站 从源码角度轻松认识mysql整体框架图
- 自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧
- 使用PInvoke互操作,让C#和C++愉快的交互优势互补
- 阿里短信回执.net sdk的bug导致生产服务cpu 100%排查
- List的扩容机制,你真的明白吗?
- BitArray虽好,但请不要滥用,又一次线上内存暴增排查
- 记一次排查线上程序内存的忽高忽低,又是大集合惹祸了
- 追了多年的开发框架,你还认识指针吗?
- 还不明白可空类型原理? 我可要挖到底了
- 不要把异常当做业务逻辑,这性能可能你无法承受
- 内存迟迟下不去,可能你就差一个GC.Collect