2014-06-18 55 views
2

我有一個在用戶註冊後發送電子郵件的服務。每隔一段時間,用戶都會聯繫支持,抱怨他們沒有收到電子郵件,所以我列出了可能出現的問題,其中之一是smtp未能發送電子郵件,我偶爾會注意到當我會遍歷代碼。我想編寫一個簡單的循環,嘗試在發送失敗時重發幾次電子郵件,但我不知道如何去做。我很感謝關於這個問題的任何建議。無法發送時重發smtp電子郵件的循環

public void MusicDownloadEmail(string email) 
    { 
     try 
     { 
      var smtp = new SmtpClient(); 
      var mail = new MailMessage(); 
      const string mailBody = "Body text"; 
      mail.To.Add(email); 
      mail.Subject = "Mail subject"; 
      mail.Body = mailBody; 
      mail.IsBodyHtml = true; 
      smtp.Send(mail); 
     } 
     catch (Exception ex) 
     {     
      var exception = ex.Message.ToString(); 
      //Other code for saving exception message to a log. 
     } 
    } 
+0

所以你得到一個例外? – TheNorthWes

+0

是的,我很少遇到'發送電子郵件失敗'錯誤。 –

回答

4

像這樣的東西應該做的伎倆:

public void MusicDownloadEmail(string email) 
{ 
    int tryAgain = 10; 
    bool failed = false; 
    do 
    { 
     try 
     { 
      failed = false; 

      var smtp = new SmtpClient(); 
      var mail = new MailMessage(); 
      const string mailBody = "Body text"; 
      mail.To.Add(email); 
      mail.Subject = "Mail subject"; 
      mail.Body = mailBody; 
      mail.IsBodyHtml = true; 
      smtp.Send(mail); 
     } 
     catch (Exception ex) // I would avoid catching all exceptions equally, but ymmv 
     {     
      failed = true; 
      tryAgain--; 
      var exception = ex.Message.ToString(); 
      //Other code for saving exception message to a log. 
     } 
    }while(failed && tryAgain !=0) 
} 
2

你可以做到這一點recusively

首先定義重試

public const int MAX_RETRY_COUNT = 3; 

的最高量。然後使用調用該方法重試次數

MusicDownloadEmail("[email protected]", MAX_RETRY_COUNT); 

並修改方法如下

public static void MusicDownloadEmail(string email, int retryCountsLeft) { 
     if (retryCountsLeft > 1) { 
      try { 
       var smtp = new SmtpClient(); 
       var mail = new MailMessage(); 
       const string mailBody = "Body text"; 
       mail.To.Add(email); 
       mail.Subject = "Mail subject"; 
       mail.Body = mailBody; 
       mail.IsBodyHtml = true; 
       smtp.Send(mail); 

      } catch (Exception ex) { 
       var exception = ex.Message.ToString(); 
       //Other code for saving exception message to a log. 

       MusicDownloadEmail(email, --retryCountsLeft); 
      } 
     } 
    }