2015-08-25 5 views
5

मैं एएसपी.नेट का उपयोग करके एक वेबसाइट विकसित कर रहा हूं। वहां मैं उपयोगकर्ताओं को ईमेल भेज रहा हूं।नेटवर्क के मामले में एएसपी.नेट में ईमेल कतार तंत्र कैसे बनाएं?

वर्तमान में मैं इस कोड का उपयोग उपयोगकर्ता को असीमित रूप से ईमेल भेजने के लिए कर रहा हूं। ईमेल पृष्ठभूमि में भेज रहे हैं।

public static void SendEmail(string Path, string EmailTo) 
{ 
    Thread emailThread = new Thread(delegate() 
    { 
     try 
     { 
      string body = string.Empty; 
      using (StreamReader reader = new StreamReader(Path)) 
      { 
       body = reader.ReadToEnd(); 
      } 
      MailMessage mail = new MailMessage(); 

      mail.From = new MailAddress("[email protected]"); 
      mail.To.Add(EmailTo); 
      mail.Subject = "Test email"; 
      mail.Body += body; 
      mail.IsBodyHtml = true; 

      SmtpClient smtpClient = new SmtpClient("smtp.test.com");    
      smtpClient.Port = 587; 
      smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
      smtpClient.UseDefaultCredentials = false; 
      smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "test"); 
      smtpClient.EnableSsl = true; 

      smtpClient.SendCompleted += (s, e) => 
      { 
       smtpClient.Dispose(); 
       mail.Dispose(); 
      }; 
      try 
      { 
       smtpClient.Send(mail); 
      } 
      catch (Exception ex) { /* exception handling code here */ } 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
    }); 
    emailThread.IsBackground = true; 
    emailThread.Start(); 
} 

तो ऊपर कोड ठीक काम कर रहा है। लेकिन एक दिन मुझे एक समस्या मिली। जब मैं एक ही समय में भेजें बटन दबाता हूं तो मेरा इंटरनेट कनेक्शन नीचे था। तो ईमेल निकाल दिया नहीं गया था। उस समय मुझे एहसास हुआ कि इस ईमेल फ़ंक्शन को ईमेल कतार में कुछ तंत्र की आवश्यकता है और इसे कतार में क्रम के अनुसार उपयोगकर्ताओं को एक-एक करके भेजना है। तो यदि कोई ईमेल अनचाहे हो गया है या यदि नेटवर्क नीचे हो जाता है तो इसे पुनः प्रयास करें। तो इस तंत्र को कैसे प्राप्त करें?

उत्तर

3

उन्हें भेजने से ईमेल की कतार में कमी। उदाहरण:

  1. आउटगोइंग ईमेल के लिए डेटाबेस तालिका बनाएं, उनकी प्रेषित तिथि के लिए कॉलम के साथ।
  2. जब भी आप एक आउटगोइंग ईमेल भेजना चाहते हैं, उसे तालिका में एक पूर्ण प्रेषित दिनांक के साथ डालें।
  3. एक पूर्ण कार्य तिथि के साथ ईमेल की जांच करने के लिए प्रत्येक एक्स सेकंड चलाने के लिए पृष्ठभूमि कार्य करें, उन्हें भेजने का प्रयास करें, और सफल होने पर उनकी प्रेषित तिथि अपडेट करें। HINT: ASP.NET में पुनरावर्ती कार्यों को कतारबद्ध करने के एक आसान तरीके के लिए this पर एक नज़र डालें।

यह एक बहुत ही सरल हद तक आसान उदाहरण है, लेकिन आप आसानी से इसका विस्तार कर सकते हैं।

+0

तो आप कह रहे हैं कि हर दूसरे के लिए डीबी पर एक चयन क्वेरी निष्पादित की जानी चाहिए? क्या यह एक प्रदर्शन मुद्दा नहीं है? – Banjo

+0

@ सिलार, मैंने कहा कि हर एक्स सेकंड, उदा। हर 30 सेकंड। और नहीं, यह एक प्रदर्शन मुद्दा नहीं होगा। –

संबंधित मुद्दे