2011-12-11 52 views
0

我想用用戶的郵件填寫一個隊列,在一段時間後向他們發送確認郵件,所以每次用戶填寫他的註冊表單時,我都會添加他在訂購後約一分鐘發送郵件給他們,這裏的隊列是我的代碼關於在ASP.net中加載頁面時清除隊列

public static class Gmail 
    { 
     private static int ? date; 
     public static bool SendMail(string AdminMail,string AdminPassword,string subject,string toAddress, string content,DateTime SendTime) 
     { 
      var toAddressList = new Queue<string>(); 
      toAddressList.Enqueue(toAddress); 
      if(date==null) 
      { 
       date = DateTime.Now.Second; 
      } 
      if (date-SendTime.Second > 120) 
      { 
        var message = new MailMessage 
             { 
              From = new MailAddress(AdminMail) 
             }; 

        foreach (var toAddressl in toAddressList) 
        { 
         message.To.Add(new MailAddress(toAddressl)); 
        } 

        message.Subject = subject; 
        message.Body = content; 
        message.IsBodyHtml = true; 
        var smtp = new SmtpClient 
            { 
             Credentials = new System.Net.NetworkCredential(AdminMail, AdminPassword), 
             Port = 587, 
             Host = "smtp.gmail.com", 
             EnableSsl = true 
            }; 
        smtp.Send(message); 
       //date = SendTime; 
       return true; 
      } 
      return false; 
     } 
    } 

,但實際上發生的事情是隊列從零每一次啓動,因此,它只是填充的郵件當前註冊用戶,並且從不包含我希望它們存在的先前註冊用戶的郵件,因爲我將發送郵件給隊列中存在的所有郵件。所以我想知道如何防止隊列在頁面加載時被清除。有任何想法嗎??

回答

1

toAddress是用靜態方法的範圍定義的。它只會在該方法調用期間存在。這就是爲什麼它總是0.

你可以推動它成爲一個靜態字段或屬性(即旁邊的日期屬性),但你仍然會有這個問題;例如,如果應用程序池被回收或網站重新啓動,該怎麼辦?你將失去隊列中的所有東西。

更強大的設計將涉及將此信息存儲在數據庫中,並針對最近添加的那些記錄運行排定檢查,例如,沒有設置「確認發送電子郵件」列值。

+0

關於健壯的設計和靜態領域,你是完全正確的:) – Islam