經常發郵件的朋友都知道,郵箱有個特殊功能,可以設定http://www.php.cn/code/6259.html" target="_blank">郵件發送時間,定時發送,這個功能是怎麼實現的呢?接下來,小編給大家分享.NET實現定時發送郵件的代碼,有需要的朋友可以參考下
有時候我們或許會遇到想在某一個時刻給別人發送一封郵件,就像是在生日的時候,但是我們又怕到時候忘記了,這時就應該
使用發送定時郵件的功能,但是這個定時發送郵件功能是怎麼實現的呢?下面用兩種方式實現.net定時發送郵件代碼,具體請看下面內容。
實現思路、需求添加一個全域應用程式類Global.asax
代碼會在訪問網站時運行
Global.asax代碼:
void Application_Start(object sender, EventArgs e) { // 在應用程式啟動時啟動並執行代碼 System.Timers.Timer timer = new System.Timers.Timer();//設計時間間隔,如果一個小時執行一次就改為 timer.Elapsed += new System.Timers.ElapsedEventHandler(Send); timer.AutoReset = true; timer.Enabled = true; } void Application_End(object sender, EventArgs e) { // 在應用程式關閉時啟動並執行代碼 System.Threading.Thread.Sleep(); string strUrl = "伺服器位址"; System.Net.HttpWebRequest _HttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(strUrl); System.Net.HttpWebResponse _HttpWebResponse = (System.Net.HttpWebResponse)_HttpWebRequest.GetResponse(); System.IO.Stream _Stream = _HttpWebResponse.GetResponseStream();//得到回寫的位元組流 _HttpWebResponse.Close(); } void Application_Error(object sender, EventArgs e) { // 在出現未處理的錯誤時啟動並執行代碼 } void Session_Start(object sender, EventArgs e) { // 在新會話啟動時啟動並執行代碼 } void Session_End(object sender, EventArgs e) { // 在會話結束時啟動並執行代碼。 // 注意: 只有在 Web.config 檔案中的 sessionstate 模式設定為 // InProc 時,才會引發 Session_End 事件。如果會話模式設定為 StateServer // 或 SQLServer,則不引發該事件。 } private void Send(object sender, System.Timers.ElapsedEventArgs e) { switch (DateTime.Now.Hour) { case : case : SendEMail(); break; //default: // SendEMail(); // break; } } private void SendEMail() { string mailFrom = System.Configuration.ConfigurationManager.AppSettings["MailFrom"].ToString(); string mailUser = System.Configuration.ConfigurationManager.AppSettings["MailUser"].ToString(); string mailPassword = System.Configuration.ConfigurationManager.AppSettings["MailPassword"].ToString(); string hostIP = System.Configuration.ConfigurationManager.AppSettings["MailHost"].ToString(); List<string> mailAddress = new List<string>(); string mailSubjct = "郵件主題"; string mailBody = "郵件內容:"; mailAddress.Add("郵件地址");string strReturn = sendMail(mailSubjct, mailBody, mailFrom, mailAddress, hostIP, mailUser, mailPassword, false); }
sendMail方法
public static string sendMail(string mailSubjct, string mailBody, string mailFrom, List<string> mailAddress, string hostIP, string username, string password, bool ssl) { string str = ""; try { MailMessage message = new MailMessage { IsBodyHtml = true, Subject = mailSubjct, Body = mailBody, From = new MailAddress(mailFrom) }; for (int i = ; i < mailAddress.Count; i++) { message.To.Add(mailAddress[i]); } SmtpClient client = new SmtpClient { EnableSsl = ssl, UseDefaultCredentials = false }; NetworkCredential credential = new NetworkCredential(username, password); client.Credentials = credential; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Host = hostIP; client.Port = x; client.Send(message); } catch (Exception exception) { str = exception.Message; } return str; }
第二種方式:
定時發郵件可以用Timer來設定時間,放在了Global.asax的Application_Start裡面
using System.Net.Mail; using System.Timers; protected void Application_Start(object sender, EventArgs e) { Timer t = new Timer(60000);//設計時間間隔,如果一個小時執行一次就改為3600000 ,這裡一分鐘調用一次 t.Elapsed += new ElapsedEventHandler(t_Elapsed); t.AutoReset = true; t.Enabled = true; } private void t_Elapsed(object sender, ElapsedEventArgs e) { MailMessage message = new MailMessage(); message.From = Messagefrom; message.To.Add(MessageTo); //收件者郵箱地址可以是多個以實現群發 message.Subject = MessageSubject; message.Body = MessageBody; message.IsBodyHtml = true; //是否為html格式 message.Priority = MailPriority.High; //發送郵件的優先等級 SmtpClient sc = new SmtpClient(); sc.Host = "smtp.sina.com"; //指定發送郵件的伺服器位址或IP sc.Port = 25; //指定發送郵件連接埠 //sc.UseDefaultCredentials = true; //sc.EnableSsl = true; sc.Credentials = new System.Net.NetworkCredential(“**@**”, "密碼"); //指定登入伺服器的使用者名稱和密碼 sc.Send(message); //發送郵件 }
到此全部代碼就寫完了。
建立一個控制台程式,產生一個exe 採用windows的計劃任務程式指定每天的某個時間點發送思路就是這個思路比服務簡單