亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net基于windows服務實現定時發送郵件的方法

2024-07-10 13:29:42
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了asp.net基于windows服務實現定時發送郵件的方法,結合實例形式較為詳細的分析了asp.net調用Windows系統服務的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
 

本文實例講述了asp.net基于windows服務實現定時發送郵件的方法。分享給大家供大家參考,具體如下:
 

  1. //定義組件 
  2. private System.Timers.Timer time; 
  3. public int nowhour; 
  4. public int minutes; 
  5. public string sendTime; 
  6. public Thread th; 
  7. public string isOpen;//是否啟用定時發送 
  8. public string strToEUser; 
  9. public static int index = -1; 
  10. public static ArrayList mulitaddress; 
  11. //服務開始 
  12. protected override void OnStart(string[] args) 
  13.   time = new System.Timers.Timer(); 
  14.   time.Enabled = true
  15.   time.AutoReset = true
  16.   //定時執行方法 
  17.    time.Elapsed+=new System.Timers.ElapsedEventHandler(time_Elapsed); 
  18.     UserEmail toUser =new UserEmail(); 
  19.     mulitaddress = GetMailAdressName(); 
  20.    // LogHelper.SaveNote("當前索引的值" + index.ToString()); 
  21.     Thread.Sleep(2000); 
  22.    time.Start(); 
  23. public class LogHelper 
  24.   public static void SaveNote(string note) 
  25.   { 
  26.     FileStream stream = new FileStream(GetLogDirectory("Common") + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite); 
  27.     StreamWriter writer = new StreamWriter(stream, Encoding.UTF8); 
  28.     writer.WriteLine("================================================================"); 
  29.     writer.WriteLine(string.Format("Note:/t{0}", note)); 
  30.     writer.WriteLine(string.Format("DateTime:/t{0}/r/n/r/n",DateTime.Now.ToString())); 
  31.     stream.Flush(); 
  32.     writer.Close(); 
  33.     stream.Close(); 
  34.     stream.Dispose(); 
  35.     writer.Dispose(); 
  36.   } 
  37.   public static void SaveNote(string note, string txtname) 
  38.   { 
  39.     FileStream stream = new FileStream(GetLogDirectory(txtname) + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite); 
  40.     StreamWriter writer = new StreamWriter(stream, Encoding.GetEncoding("gb2312")); 
  41.     writer.WriteLine("================================================================"); 
  42.     writer.WriteLine(string.Format("Note:/t{0}", note)); 
  43.     writer.WriteLine(string.Format("DateTime:/t{0}/r/n/r/n", DateTime.Now.ToString("yyyyMMddHHmmss"))); 
  44.     stream.Flush(); 
  45.     writer.Close(); 
  46.     stream.Close(); 
  47.     stream.Dispose(); 
  48.     writer.Dispose(); 
  49.   } 
  50.   public static void SaveException(Exception e) 
  51.   { 
  52.     SaveException(e, string.Empty); 
  53.   } 
  54.   public static void SaveException(Exception e, string memo) 
  55.   { 
  56.     FileStream stream = new FileStream(GetLogDirectory("Common") + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite); 
  57.     StreamWriter writer = new StreamWriter(stream); 
  58.     writer.WriteLine("================================================================"); 
  59.     writer.WriteLine(string.Format("Memo:/t{0}", memo)); 
  60.     writer.WriteLine(string.Format("DateTime:/t{0}", DateTime.Now.ToShortTimeString())); 
  61.     writer.WriteLine(string.Format("Message:/t{0}", e.Message)); 
  62.     writer.WriteLine(string.Format("StackTrace:/r/n----------/r/n{0}/r/n----------/r/n/r/n/r/n", e.StackTrace)); 
  63.     stream.Flush(); 
  64.     writer.Close(); 
  65.     stream.Close(); 
  66.     stream.Dispose(); 
  67.     writer.Dispose(); 
  68.   } 
  69.   public static string GetLogDirectory(string category) 
  70.   { 
  71.     string baseDirectory = string.Empty; 
  72.     if ((HttpContext.Current != null) && (HttpContext.Current.Server != null)) 
  73.     { 
  74.       baseDirectory = HttpContext.Current.Server.MapPath("~"); 
  75.     } 
  76.     else 
  77.     { 
  78.       baseDirectory = AppDomain.CurrentDomain.BaseDirectory; 
  79.     } 
  80.     if ((baseDirectory[baseDirectory.Length - 1] != '/') && (baseDirectory[baseDirectory.Length - 1] != '//')) 
  81.     { 
  82.       baseDirectory = baseDirectory + @"/"
  83.     } 
  84.     baseDirectory = string.Format(@"{0}Log/{1}/", baseDirectory, category); 
  85.     if (!Directory.Exists(baseDirectory)) 
  86.     { 
  87.       Directory.CreateDirectory(baseDirectory); 
  88.     } 
  89.     return baseDirectory; 
  90.   } 
  91. void time_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
  92.   try 
  93.   { 
  94.     if (mulitaddress != null
  95.     { 
  96.       LogHelper.SaveNote("進入time_Elapsed"); 
  97.       //獲取定時發送時間 
  98.       sendTime = Convert.ToString(GetConfigValue("sendTime")); 
  99.       LogHelper.SaveNote("sendTime" + sendTime); 
  100.       //是否開啟定時發送功能 
  101.       isOpen = GetConfigValue("isOpen"); 
  102.       int sleeptime = Convert.ToInt32(GetConfigValue("SleepTime")); 
  103.       int stoptime = Convert.ToInt32(GetConfigValue("stoptime")); 
  104.       //LogHelper.SaveNote("數組長度" + mulitaddress.Count); 
  105.       // LogHelper.SaveNote("是否開啟定時發送功能" + isOpen + "定時時間" + sendTime + "定時小時數:" + Convert.ToInt32(sendTime.Split(new char[] { ':' })[0]) + "定時分鐘數:" + Convert.ToInt32(sendTime.Split(new char[] { ':' })[1])); 
  106.       if (isOpen == "true"
  107.       { 
  108.         //現在時間 小時 
  109.         nowhour = Convert.ToInt32(DateTime.Now.Hour.ToString());//10 
  110.         //現在分鐘 
  111.         minutes = Convert.ToInt32(DateTime.Now.Minute.ToString());//5 
  112.         //獲取發送小時 
  113.         int sendhour = Convert.ToInt32(sendTime.Split(new char[] { ':' })[0]); 
  114.         //獲取發送的分鐘 
  115.         int sendMinute = Convert.ToInt32(sendTime.Split(new char[] { ':' })[1]); 
  116.         LogHelper.SaveNote("進入定時發送郵件服務! 定時小時為:" + sendhour.ToString() + "定時分鐘為:" + sendMinute.ToString() + "現在小時為:" + nowhour.ToString() + "現在定時的分鐘為:" + minutes.ToString()); 
  117.         LogHelper.SaveNote("當前索引的值" + index.ToString()); 
  118.         if (nowhour == stoptime) 
  119.         { 
  120.           LogHelper.SaveNote("停止時間點到了 郵件停止發送 ?。?!"); 
  121.           index = -1; 
  122.         } 
  123.         else 
  124.         { 
  125.           //如果和當前的時間 小時相等 則定時發送郵件 
  126.           if ((Convert.ToDateTime(DateTime.Now.ToShortTimeString()) >= Convert.ToDateTime(sendTime)) && index < mulitaddress.Count) 
  127.           { 
  128.             index++; 
  129.             if (index < mulitaddress.Count) 
  130.             { 
  131.               SendEmail(((UserEmail)mulitaddress[index])); 
  132.             } 
  133.             else 
  134.             { 
  135.               LogHelper.SaveNote("發送完畢 當前的索引值為" + index.ToString()); 
  136.             } 
  137.           } 
  138.         } 
  139.       } 
  140.       else 
  141.       { 
  142.         //LogHelper.SaveNote("當前索引的值" + index.ToString()); 
  143.         index++; 
  144.         if (index < mulitaddress.Count) 
  145.         { 
  146.           SendEmail(((UserEmail)mulitaddress[index])); 
  147.         } 
  148.         else 
  149.         { 
  150.           LogHelper.SaveNote("發送完畢 時間停止"); 
  151.           time.Enabled = false
  152.           time.Stop(); 
  153.         } 
  154.       } 
  155.       Thread.Sleep(sleeptime); 
  156.     } 
  157.     else 
  158.       LogHelper.SaveNote("mulitaddress=null"); 
  159.   } 
  160.   catch (Exception ex)  
  161.   { 
  162.     LogHelper.SaveNote(ex.ToString()); 
  163.   } 
  164. public ArrayList GetMailAdressName() 
  165.   ArrayList list = new ArrayList(); 
  166.   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)"
  167.   SqlDataReader dr = SqlHelper.ExecuteReader(CommandType.Text, strSQL, null); 
  168.   if (dr.HasRows) 
  169.   { 
  170.     while (dr.Read()) 
  171.     { 
  172.       UserEmail email = new UserEmail(); 
  173.       email.Mailaddres = dr["mailAddress"].ToString(); 
  174.       email.Title = dr["title"].ToString(); 
  175.       email.Contents = dr["mailtemplate"].ToString(); 
  176.       list.Add(email); 
  177.     } 
  178.   } 
  179.   return list; 
  180. /// <summary> 
  181. /// 定義用戶郵件 標題 內容 Email地址 
  182. /// </summary> 
  183. public class UserEmail { 
  184.   private string title; 
  185.   private string contents; 
  186.   public string Contents 
  187.   { 
  188.     get { return contents; } 
  189.     set { contents = value; } 
  190.   } 
  191.   private string mailaddres; 
  192.   public string Mailaddres 
  193.   { 
  194.     get { return mailaddres; } 
  195.     set { mailaddres = value; } 
  196.   } 
  197.   public string Title {  
  198.   get{return title;} 
  199.     set { title = value; } 
  200.   } 
  201. #region 發送郵件 
  202. /// <summary> 
  203. /// 發送郵件 
  204. /// </summary> 
  205. public void SendEmail(UserEmail user) 
  206.   try 
  207.   { 
  208.     LogHelper.SaveNote("進入SendEmail!!!"); 
  209.     //郵件服務器 
  210.     string smtpserver = GetConfigValue("smtpserver"); 
  211.     //發件人的郵箱名稱 
  212.     string emailuserName = GetConfigValue("emailuserName"); 
  213.     //發件人的郵箱密碼 
  214.     string emailuserpwd = GetConfigValue("emailuserpwd"); 
  215.     //郵箱地址 
  216.     string emailfrom = GetConfigValue("emailfrom"); 
  217.     int port = Convert.ToInt32(GetConfigValue("serverPort")); 
  218.     bool f = true
  219.     //是否經過SSL加密 
  220.     string isSSL = GetConfigValue("SSL"); 
  221.     if (isSSL == "true"
  222.     { 
  223.       f = true
  224.     } 
  225.     else 
  226.     { 
  227.       f = false
  228.     } 
  229.     LogHelper.SaveNote("發件人的郵箱名稱" + emailuserName + "郵件地址(emailFrom)" + emailfrom + "收件人" + user.Mailaddres); 
  230.     SendEmailToUser(smtpserver, port, f, user.Mailaddres, null, emailuserName, emailuserpwd, emailfrom, user.Title,user.Contents); 
  231.     LogHelper.SaveNote("Send Mail Success"); 
  232.   } 
  233.   //獲取異常信息 
  234.   catch (Exception error) 
  235.   { 
  236.     //寫入異常信息 
  237.     using (StreamWriter sw = new StreamWriter("F://MailErrorlog.txt"true, System.Text.Encoding.UTF8)) 
  238.     { 
  239.       sw.WriteLine(DateTime.Now.ToString() + ":"); 
  240.       sw.WriteLine("Exception 異常信息如下................."); 
  241.       sw.WriteLine(error.ToString()); 
  242.       sw.WriteLine("---------------------------------------------"); 
  243.       sw.Close(); 
  244.     } 
  245.   } 
  246. #endregion 
  247. #region 利用.Net自帶類(SmtpClient) 發送郵件 
  248. /// <summary> 
  249. /// 利用.Net自帶類(SmtpClient) 發送郵件 
  250. /// </summary> 
  251. /// <param name="stmpserver">郵件服務器</param> 
  252. /// <param name="username">用戶名(郵箱名稱)</param> 
  253. /// <param name="pwd">密碼</param> 
  254. /// <param name="f">是否經過SSL加密</param> 
  255. /// <param name="port">郵件服務器端口(沒有加密 一般都是25)</param> 
  256. /// <param name="strfrom">發件人</param> 
  257. /// <param name="strto">收件人</param> 
  258. /// <param name="subject">主題</param> 
  259. /// <param name="body">內容</param> 
  260. /// <param name="Mulitaddress">發送多人 收件人的郵箱地址以逗號隔開</param> 
  261. /// <param name="attachmentName">發送的附件名稱 沒有附件則為null or ""</param> 
  262. public void SendEmailToUser(string stmpserver,int port,bool f, string Mulitaddress, string attachmentName, string username, string pwd, string strfrom, string subject, string body) 
  263.   string ErrorLog = GetConfigValue("ErrorLog"); 
  264.   SmtpClient smtp = new SmtpClient(); 
  265.   //發送郵件的方式 
  266.   smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
  267.   //指定郵件服務器 
  268.   smtp.Host = stmpserver; 
  269.   //Gmail QQ stmp ssl加密使用的端口  
  270.   smtp.Port = port; 
  271.   smtp.EnableSsl = f; ;//true 經過ssl加密  
  272.   //驗證發件人的身份 用戶名(郵件地址和密碼) 
  273.   smtp.Credentials = new System.Net.NetworkCredential(username, pwd); 
  274.   //初始化信息(來自 接收人) 
  275.   MailMessage _mailmessage = new MailMessage(); 
  276.   //_mailmessage.To = strto; 
  277.   //發送多個人 接收人郵件地址以,隔開 
  278.   _mailmessage.From = new MailAddress(strfrom); 
  279.   _mailmessage.To.Add(Mulitaddress); 
  280.   //如果發送失敗,SMTP 服務器將發送 失敗郵件通知 
  281.   _mailmessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 
  282.   //優先級 
  283.   _mailmessage.Priority = MailPriority.High; 
  284.   //發送主題 
  285.   _mailmessage.Subject = subject; 
  286.   //有附件則添加附件 
  287.   if (!string.IsNullOrEmpty(attachmentName)) 
  288.   { 
  289.     System.Net.Mail.Attachment attch = new System.Net.Mail.Attachment(attachmentName); 
  290.     _mailmessage.Attachments.Add(attch); 
  291.   } 
  292.   //郵件主題編碼 
  293.   _mailmessage.SubjectEncoding = System.Text.Encoding.UTF8; 
  294.   //指定發送的格式 (Html) 
  295.   _mailmessage.IsBodyHtml = true
  296.   //指定發送郵件的編碼 
  297.   _mailmessage.BodyEncoding = System.Text.Encoding.UTF8; 
  298.   //指定郵件內容 
  299.   _mailmessage.Body = body; 
  300.   //發送郵件 
  301.   try 
  302.   { 
  303.     smtp.Send(_mailmessage); 
  304.   } 
  305.   catch (Exception ex) 
  306.   { 
  307.     using (StreamWriter writer = new StreamWriter(ErrorLog+"://MailErrorlog.txt"true, System.Text.Encoding.UTF8)) 
  308.     { 
  309.       writer.WriteLine("---------------------------------------------"); 
  310.       writer.WriteLine("SendEmail方法發送郵件錯誤日志................"); 
  311.       writer.WriteLine(ex.ToString()); 
  312.       writer.Flush(); 
  313.       writer.Close(); 
  314.     } 
  315.   } 
  316. #endregion 
  317. #region 獲取郵件配置節點的值 
  318. /// <summary> 
  319. /// 加載相應配置文件 并按節點名稱獲取對應的值 
  320. /// </summary> 
  321. /// <param name="target">當前節點的名稱</param> 
  322. /// <returns>返回當前節點名稱所對應的值</returns> 
  323. public string GetConfigValue(string target) 
  324.   string configpath=System.Windows.Forms.Application.StartupPath.ToString() + "/Email.config"
  325.   return GetConfigValue(configpath, target); 
  326. /// <summary> 
  327. /// 根據節點名稱獲取配置文件對應的值(郵件配置信息) 
  328. /// </summary> 
  329. /// <param name="configpath">配置文件路徑</param> 
  330. /// <param name="target">要獲取配置節點的名稱</param> 
  331. /// <returns>返回當前節點名稱所對應的值</returns> 
  332. public string GetConfigValue(string configpath, string target) 
  333.   XmlDocument doc = new XmlDocument(); 
  334.   //加載文件路徑s 
  335.   doc.Load(configpath); 
  336.   //獲取當前節點的根節點 
  337.   XmlElement root = doc.DocumentElement; 
  338.   //獲取當前節點下所有匹配子節點元素 
  339.   XmlNodeList xmlnode = root.GetElementsByTagName(target); 
  340.   //返回值 
  341.   return xmlnode[0].InnerXml; 
  342. #endregion 
  343. //服務結束 
  344. protected override void OnStop() 
  345.   time.Enabled = false
?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91极品女神在线| 欧美成aaa人片免费看| 欧美国产中文字幕| 日韩极品精品视频免费观看| 亚洲jizzjizz日本少妇| 欧美日韩亚洲国产一区| 欧美激情乱人伦一区| 青草青草久热精品视频在线观看| 日韩精品欧美激情| 日韩免费av一区二区| 亚洲国产精品国自产拍av秋霞| 久久久国产成人精品| 久久久久久久国产精品| 久久99亚洲精品| 黄色一区二区在线观看| 中文字幕av一区中文字幕天堂| 国产精品美女久久久久av超清| 在线视频日韩精品| 国内精品一区二区三区| 精品少妇v888av| 亚洲码在线观看| 国产精品一区二区av影院萌芽| 成人精品一区二区三区电影免费| 欧美日韩免费一区| 国产精品精品视频| 亚洲欧美日本精品| 欧美视频免费在线| 欧美亚洲国产日本| 亚洲高清不卡av| 日韩电视剧在线观看免费网站| 91视频免费在线| 日韩在线中文视频| 国产精品av在线播放| 亚洲日本欧美中文幕| 亚洲石原莉奈一区二区在线观看| 国产成人精品在线播放| 国产精品h片在线播放| 日韩大片在线观看视频| 国产午夜精品一区理论片飘花| 在线播放精品一区二区三区| 亚洲精品日产aⅴ| 亚洲精品v天堂中文字幕| 日韩中文字幕视频在线| 国产91色在线|| 97碰碰碰免费色视频| www国产91| 九九久久精品一区| 久久免费视频在线| 国产99久久久欧美黑人| 91精品国产自产在线观看永久| 久热爱精品视频线路一| 日韩av大片免费看| 亚洲国产精品成人一区二区| 中文字幕日韩av| 国产精品久久久久久久久借妻| 91精品国产高清自在线| 亚洲影视九九影院在线观看| 91成人在线观看国产| 亚洲精品aⅴ中文字幕乱码| 久久综合久久美利坚合众国| www欧美日韩| 亚洲性猛交xxxxwww| 亚洲二区在线播放视频| 午夜精品一区二区三区在线视频| 一区二区成人av| 久久久久久18| 精品久久久精品| 亚洲国产美女久久久久| 亚洲精品电影在线观看| 亚洲第一精品夜夜躁人人爽| 亚洲欧美在线看| 欧美成年人网站| 97超碰蝌蚪网人人做人人爽| 一本大道香蕉久在线播放29| 久久久久久久久久婷婷| 午夜免费日韩视频| 国产欧美日韩免费看aⅴ视频| 国产噜噜噜噜噜久久久久久久久| 欧美肥老太性生活视频| 国产精品视频免费在线| 久久国产精品电影| 国产日韩欧美夫妻视频在线观看| 欧美极度另类性三渗透| 97成人精品区在线播放| 精品久久久久久久久久| 亚洲区bt下载| 久久香蕉国产线看观看av| 欧美午夜片欧美片在线观看| 亚洲欧洲在线观看| 久热国产精品视频| 97精品视频在线播放| 不卡av在线网站| 日韩一区二区久久久| 色七七影院综合| 久久久免费观看| 欧美日韩999| 欧美成人sm免费视频| 欧美高清无遮挡| 久久久国产精品免费| 午夜美女久久久久爽久久| 国产成人综合亚洲| 久久国产色av| 亚洲精品一区二区网址| 国产亚洲成精品久久| 波霸ol色综合久久| 日韩免费不卡av| 亚洲一区二区久久久久久久| 亚洲综合国产精品| 97**国产露脸精品国产| 久久久久久18| 成人福利网站在线观看11| 欧美精品videos另类日本| 亚洲第一精品夜夜躁人人躁| 91国产美女视频| 久久精品成人动漫| 久久久噜久噜久久综合| 中日韩美女免费视频网址在线观看| 在线看欧美日韩| 精品久久香蕉国产线看观看gif| 欧美成人免费小视频| 国内揄拍国内精品少妇国语| 亚洲在线第一页| 91九色精品视频| 久久久久久噜噜噜久久久精品| 欧美裸体xxxxx| 欧美黑人xxxⅹ高潮交| 国产精品久久久av| 国产精品极品尤物在线观看| 国产精品av在线播放| 亚洲国语精品自产拍在线观看| 精品亚洲男同gayvideo网站| 国产精品91久久| 一区二区在线免费视频| 欧美日韩中文字幕| 91精品国产精品| 午夜美女久久久久爽久久| 91在线视频免费| 亚洲欧美日本另类| 国产欧美日韩中文| 亚洲天堂第一页| 一区二区欧美日韩视频| 亚洲最大成人免费视频| 国产精品27p| 亚洲男人天堂2024| 国产精品视频在线播放| 日韩成人中文字幕| 久久久久久国产精品久久| 久久视频在线观看免费| 久久久久久国产精品美女| 一本色道久久88综合日韩精品| 国产这里只有精品| 日韩精品中文字幕在线播放| 欧美激情视频在线| 久久久久久久一区二区| 91国自产精品中文字幕亚洲| 日韩欧美在线播放| 亚洲成人久久久久| 欧美日韩在线免费| 欧美电影在线观看完整版| 久久久久久久激情视频| 欧美日韩国产中文字幕| 欧洲亚洲在线视频| 久久99亚洲精品| 97精品免费视频|