国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net基于windows服務(wù)實現(xiàn)定時發(fā)送郵件的方法

2024-07-10 12:47:35
字體:
供稿:網(wǎng)友

本文實例講述了asp.net基于windows服務(wù)實現(xiàn)定時發(fā)送郵件的方法。,具體如下:

//定義組件private System.Timers.Timer time;public int nowhour;public int minutes;public string sendTime;public Thread th;public string isOpen;//是否啟用定時發(fā)送public string strToEUser;public static int index = -1;public static ArrayList mulitaddress;//服務(wù)開始protected override void OnStart(string[] args){  time = new System.Timers.Timer();  time.Enabled = true;  time.AutoReset = true;  //定時執(zhí)行方法   time.Elapsed+=new System.Timers.ElapsedEventHandler(time_Elapsed);    UserEmail toUser =new UserEmail();    mulitaddress = GetMailAdressName();   // LogHelper.SaveNote("當(dāng)前索引的值" + index.ToString());    Thread.Sleep(2000);   time.Start();}public class LogHelper{  public static void SaveNote(string note)  {    FileStream stream = new FileStream(GetLogDirectory("Common") + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);    StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);    writer.WriteLine("================================================================");    writer.WriteLine(string.Format("Note:/t{0}", note));    writer.WriteLine(string.Format("DateTime:/t{0}/r/n/r/n",DateTime.Now.ToString()));    stream.Flush();    writer.Close();    stream.Close();    stream.Dispose();    writer.Dispose();  }  public static void SaveNote(string note, string txtname)  {    FileStream stream = new FileStream(GetLogDirectory(txtname) + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);    StreamWriter writer = new StreamWriter(stream, Encoding.GetEncoding("gb2312"));    writer.WriteLine("================================================================");    writer.WriteLine(string.Format("Note:/t{0}", note));    writer.WriteLine(string.Format("DateTime:/t{0}/r/n/r/n", DateTime.Now.ToString("yyyyMMddHHmmss")));    stream.Flush();    writer.Close();    stream.Close();    stream.Dispose();    writer.Dispose();  }  public static void SaveException(Exception e)  {    SaveException(e, string.Empty);  }  public static void SaveException(Exception e, string memo)  {    FileStream stream = new FileStream(GetLogDirectory("Common") + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);    StreamWriter writer = new StreamWriter(stream);    writer.WriteLine("================================================================");    writer.WriteLine(string.Format("Memo:/t{0}", memo));    writer.WriteLine(string.Format("DateTime:/t{0}", DateTime.Now.ToShortTimeString()));    writer.WriteLine(string.Format("Message:/t{0}", e.Message));    writer.WriteLine(string.Format("StackTrace:/r/n----------/r/n{0}/r/n----------/r/n/r/n/r/n", e.StackTrace));    stream.Flush();    writer.Close();    stream.Close();    stream.Dispose();    writer.Dispose();  }  public static string GetLogDirectory(string category)  {    string baseDirectory = string.Empty;    if ((HttpContext.Current != null) && (HttpContext.Current.Server != null))    {      baseDirectory = HttpContext.Current.Server.MapPath("~");    }    else    {      baseDirectory = AppDomain.CurrentDomain.BaseDirectory;    }    if ((baseDirectory[baseDirectory.Length - 1] != '/') && (baseDirectory[baseDirectory.Length - 1] != '//'))    {      baseDirectory = baseDirectory + @"/";    }    baseDirectory = string.Format(@"{0}Log/{1}/", baseDirectory, category);    if (!Directory.Exists(baseDirectory))    {      Directory.CreateDirectory(baseDirectory);    }    return baseDirectory;  }}void time_Elapsed(object sender, System.Timers.ElapsedEventArgs e){  try  {    if (mulitaddress != null)    {      LogHelper.SaveNote("進入time_Elapsed");      //獲取定時發(fā)送時間      sendTime = Convert.ToString(GetConfigValue("sendTime"));      LogHelper.SaveNote("sendTime" + sendTime);      //是否開啟定時發(fā)送功能      isOpen = GetConfigValue("isOpen");      int sleeptime = Convert.ToInt32(GetConfigValue("SleepTime"));      int stoptime = Convert.ToInt32(GetConfigValue("stoptime"));      //LogHelper.SaveNote("數(shù)組長度" + mulitaddress.Count);      // LogHelper.SaveNote("是否開啟定時發(fā)送功能" + isOpen + "定時時間" + sendTime + "定時小時數(shù):" + Convert.ToInt32(sendTime.Split(new char[] { ':' })[0]) + "定時分鐘數(shù):" + Convert.ToInt32(sendTime.Split(new char[] { ':' })[1]));      if (isOpen == "true")      {        //現(xiàn)在時間 小時        nowhour = Convert.ToInt32(DateTime.Now.Hour.ToString());//10        //現(xiàn)在分鐘        minutes = Convert.ToInt32(DateTime.Now.Minute.ToString());//5        //獲取發(fā)送小時        int sendhour = Convert.ToInt32(sendTime.Split(new char[] { ':' })[0]);        //獲取發(fā)送的分鐘        int sendMinute = Convert.ToInt32(sendTime.Split(new char[] { ':' })[1]);        LogHelper.SaveNote("進入定時發(fā)送郵件服務(wù)! 定時小時為:" + sendhour.ToString() + "定時分鐘為:" + sendMinute.ToString() + "現(xiàn)在小時為:" + nowhour.ToString() + "現(xiàn)在定時的分鐘為:" + minutes.ToString());        LogHelper.SaveNote("當(dāng)前索引的值" + index.ToString());        if (nowhour == stoptime)        {          LogHelper.SaveNote("停止時間點到了 郵件停止發(fā)送 !!!");          index = -1;        }        else        {          //如果和當(dāng)前的時間 小時相等 則定時發(fā)送郵件          if ((Convert.ToDateTime(DateTime.Now.ToShortTimeString()) >= Convert.ToDateTime(sendTime)) && index < mulitaddress.Count)          {            index++;            if (index < mulitaddress.Count)            {              SendEmail(((UserEmail)mulitaddress[index]));            }            else            {              LogHelper.SaveNote("發(fā)送完畢 當(dāng)前的索引值為" + index.ToString());            }          }        }      }      else      {        //LogHelper.SaveNote("當(dāng)前索引的值" + index.ToString());        index++;        if (index < mulitaddress.Count)        {          SendEmail(((UserEmail)mulitaddress[index]));        }        else        {          LogHelper.SaveNote("發(fā)送完畢 時間停止");          time.Enabled = false;          time.Stop();        }      }      Thread.Sleep(sleeptime);    }    else      LogHelper.SaveNote("mulitaddress=null");  }  catch (Exception ex)   {    LogHelper.SaveNote(ex.ToString());  }}public ArrayList GetMailAdressName(){  ArrayList list = new ArrayList();  string strSQL = "select b.mailAddress, a.mailtemplate,a.title from tg_product as a inner join tg_mailOrder as b on a.ccode=b.ccode where a.createtime=(select max(createtime) from tg_product)";  SqlDataReader dr = SqlHelper.ExecuteReader(CommandType.Text, strSQL, null);  if (dr.HasRows)  {    while (dr.Read())    {      UserEmail email = new UserEmail();      email.Mailaddres = dr["mailAddress"].ToString();      email.Title = dr["title"].ToString();      email.Contents = dr["mailtemplate"].ToString();      list.Add(email);    }  }  return list;}/// <summary>/// 定義用戶郵件 標題 內(nèi)容 Email地址/// </summary>public class UserEmail {  private string title;  private string contents;  public string Contents  {    get { return contents; }    set { contents = value; }  }  private string mailaddres;  public string Mailaddres  {    get { return mailaddres; }    set { mailaddres = value; }  }  public string Title {   get{return title;}    set { title = value; }  }}#region 發(fā)送郵件/// <summary>/// 發(fā)送郵件/// </summary>public void SendEmail(UserEmail user){  try  {    LogHelper.SaveNote("進入SendEmail!!!");    //郵件服務(wù)器    string smtpserver = GetConfigValue("smtpserver");    //發(fā)件人的郵箱名稱    string emailuserName = GetConfigValue("emailuserName");    //發(fā)件人的郵箱密碼    string emailuserpwd = GetConfigValue("emailuserpwd");    //郵箱地址    string emailfrom = GetConfigValue("emailfrom");    int port = Convert.ToInt32(GetConfigValue("serverPort"));    bool f = true;    //是否經(jīng)過SSL加密    string isSSL = GetConfigValue("SSL");    if (isSSL == "true")    {      f = true;    }    else    {      f = false;    }    LogHelper.SaveNote("發(fā)件人的郵箱名稱" + emailuserName + "郵件地址(emailFrom)" + emailfrom + "收件人" + user.Mailaddres);    SendEmailToUser(smtpserver, port, f, user.Mailaddres, null, emailuserName, emailuserpwd, emailfrom, user.Title,user.Contents);    LogHelper.SaveNote("Send Mail Success");  }  //獲取異常信息  catch (Exception error)  {    //寫入異常信息    using (StreamWriter sw = new StreamWriter("F://MailErrorlog.txt", true, System.Text.Encoding.UTF8))    {      sw.WriteLine(DateTime.Now.ToString() + ":");      sw.WriteLine("Exception 異常信息如下.................");      sw.WriteLine(error.ToString());      sw.WriteLine("---------------------------------------------");      sw.Close();    }  }}#endregion#region 利用.Net自帶類(SmtpClient) 發(fā)送郵件/// <summary>/// 利用.Net自帶類(SmtpClient) 發(fā)送郵件/// </summary>/// <param name="stmpserver">郵件服務(wù)器</param>/// <param name="username">用戶名(郵箱名稱)</param>/// <param name="pwd">密碼</param>/// <param name="f">是否經(jīng)過SSL加密</param>/// <param name="port">郵件服務(wù)器端口(沒有加密 一般都是25)</param>/// <param name="strfrom">發(fā)件人</param>/// <param name="strto">收件人</param>/// <param name="subject">主題</param>/// <param name="body">內(nèi)容</param>/// <param name="Mulitaddress">發(fā)送多人 收件人的郵箱地址以逗號隔開</param>/// <param name="attachmentName">發(fā)送的附件名稱 沒有附件則為null or ""</param>public void SendEmailToUser(string stmpserver,int port,bool f, string Mulitaddress, string attachmentName, string username, string pwd, string strfrom, string subject, string body){  string ErrorLog = GetConfigValue("ErrorLog");  SmtpClient smtp = new SmtpClient();  //發(fā)送郵件的方式  smtp.DeliveryMethod = SmtpDeliveryMethod.Network;  //指定郵件服務(wù)器  smtp.Host = stmpserver;  //Gmail QQ stmp ssl加密使用的端口   smtp.Port = port;  smtp.EnableSsl = f; ;//true 經(jīng)過ssl加密   //驗證發(fā)件人的身份 用戶名(郵件地址和密碼)  smtp.Credentials = new System.Net.NetworkCredential(username, pwd);  //初始化信息(來自 接收人)  MailMessage _mailmessage = new MailMessage();  //_mailmessage.To = strto;  //發(fā)送多個人 接收人郵件地址以,隔開  _mailmessage.From = new MailAddress(strfrom);  _mailmessage.To.Add(Mulitaddress);  //如果發(fā)送失敗,SMTP 服務(wù)器將發(fā)送 失敗郵件通知  _mailmessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;  //優(yōu)先級  _mailmessage.Priority = MailPriority.High;  //發(fā)送主題  _mailmessage.Subject = subject;  //有附件則添加附件  if (!string.IsNullOrEmpty(attachmentName))  {    System.Net.Mail.Attachment attch = new System.Net.Mail.Attachment(attachmentName);    _mailmessage.Attachments.Add(attch);  }  //郵件主題編碼  _mailmessage.SubjectEncoding = System.Text.Encoding.UTF8;  //指定發(fā)送的格式 (Html)  _mailmessage.IsBodyHtml = true;  //指定發(fā)送郵件的編碼  _mailmessage.BodyEncoding = System.Text.Encoding.UTF8;  //指定郵件內(nèi)容  _mailmessage.Body = body;  //發(fā)送郵件  try  {    smtp.Send(_mailmessage);  }  catch (Exception ex)  {    using (StreamWriter writer = new StreamWriter(ErrorLog+"://MailErrorlog.txt", true, System.Text.Encoding.UTF8))    {      writer.WriteLine("---------------------------------------------");      writer.WriteLine("SendEmail方法發(fā)送郵件錯誤日志................");      writer.WriteLine(ex.ToString());      writer.Flush();      writer.Close();    }  }}#endregion#region 獲取郵件配置節(jié)點的值/// <summary>/// 加載相應(yīng)配置文件 并按節(jié)點名稱獲取對應(yīng)的值/// </summary>/// <param name="target">當(dāng)前節(jié)點的名稱</param>/// <returns>返回當(dāng)前節(jié)點名稱所對應(yīng)的值</returns>public string GetConfigValue(string target){  string configpath=System.Windows.Forms.Application.StartupPath.ToString() + "/Email.config";  return GetConfigValue(configpath, target);}/// <summary>/// 根據(jù)節(jié)點名稱獲取配置文件對應(yīng)的值(郵件配置信息)/// </summary>/// <param name="configpath">配置文件路徑</param>/// <param name="target">要獲取配置節(jié)點的名稱</param>/// <returns>返回當(dāng)前節(jié)點名稱所對應(yīng)的值</returns>public string GetConfigValue(string configpath, string target){  XmlDocument doc = new XmlDocument();  //加載文件路徑s  doc.Load(configpath);  //獲取當(dāng)前節(jié)點的根節(jié)點  XmlElement root = doc.DocumentElement;  //獲取當(dāng)前節(jié)點下所有匹配子節(jié)點元素  XmlNodeList xmlnode = root.GetElementsByTagName(target);  //返回值  return xmlnode[0].InnerXml;}#endregion//服務(wù)結(jié)束protected override void OnStop(){  time.Enabled = false;}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 麻江县| 三台县| 石屏县| 新安县| 甘泉县| 广南县| 新沂市| 镇安县| 南昌县| 邛崃市| 孟连| 屏东县| 凤城市| 永定县| 石城县| 万州区| 衡阳县| 和平区| 民乐县| 汨罗市| 桐乡市| 方山县| 嘉峪关市| 阜南县| 樟树市| 阿合奇县| 凉山| 山东省| 邳州市| 崇阳县| 太保市| 普陀区| 桂东县| 安宁市| 吴堡县| 芦山县| 灯塔市| 南宁市| 定南县| 繁峙县| 陕西省|