2014-09-01 132 views
0

當一次迭代結束時,我的應用程序將重新啓動。 當代碼/應用程序出現異常時,我需要發送電子郵件。反覆發送電子郵件。 c#

假設應用程序出現異常,我正在發送電子郵件。 第一次迭代..在電子郵件中發送異常。 應用程序重新啓動該過程。 第二次迭代..當例外到它必須檢查上次發送的電子郵件時間..如果少於30分鐘,不要發送電子郵件。如果超過30分鐘發送電子郵件。

我該如何對它進行編碼?

我試過定時器。那沒用。

這裏有幾行代碼。

catch (Exception ex) 
     { 
      Log("An exception has occured in the application: " + ex.Message); 
      exceptionMessage = ex.Message; 
      failureEmail = true; 
      SendFailureMail(exceptionMessage); 
     } 


    private void SendFailureMail(String message) 
    { 

     emailTime = DateTime.Now.ToString("h:mm"); 
     //if (emailTime.Equals("00:00") || emailTime.Equals("1:00") || emailTime.Equals("2:00") || emailTime.Equals("3:00") 
     // || emailTime.Equals("4:00") || emailTime.Equals("5:00") || emailTime.Equals("6:00") || emailTime.Equals("7:00") 
     // || emailTime.Equals("8:00") || emailTime.Equals("9:00") || emailTime.Equals("10:00") || emailTime.Equals("11:00") 
     // || emailTime.Equals("12:00")) 
     //{ 
     if (failureEmail) 
     { 
      eMailID = string.Empty; 
      subject = string.Empty; 
      mailBody = string.Empty; 
      eMailID = eMailIDFailure; 
      subject = eMailSubjectFailure; 
      emailBodyGeneric.Append(message); 
      mailBody = emailBodyGeneric.ToString(); 

      if (sendmail()) 
      { 
       Log("Mail Sent"); 

      } 
      else 
      { 
       Log("Sending Mail Failed."); 
      } 
     } 
    } 
+3

將上次發送的日期時間寫入文件;如果該文件存在且其日期時間少於30分鐘,則不做任何操作,否則發送電子郵件並將日期時間保存回磁盤。 – 2014-09-01 17:53:08

回答

0

發送電子郵件時,使用時間戳寫入日誌文件。

這可以很容易地完成。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

     } 
     private static void LogEmailSent(DateTime date) 
     { 
      using(StreamWriter writer = new StreamWriter("my path")) 
      { 
       writer.WriteLine(date); 

      } 
     } 
     private static bool EmailSent() 
     { 
      bool logged = false; 

      //It is a good idea to include try catch and a good idea to check if the file exists; 
      if (!File.Exists("my file")) 
       return false; 

      using(StreamReader rdr = new StreamReader("my path")) 
      { 

       while(!rdr.EndOfStream) 
       { 
        string line = rdr.ReadLine(); 
        DateTime dateLogged = Convert.ToDateTime(line); 
        TimeSpan difference = DateTime.Now.Subtract(dateLogged); 
        if(difference.TotalMinutes <= 30) 
        { 
         logged = true; 
        } 


        break; //the file contains a line, so try to parse the datetime; 

       } 
      } 
      return logged; 

     } 
    } 
} 

記住這是一個例子。可以做很多的tweeking。

+0

感謝它幫助:) – user3332414 2014-09-05 04:20:47