2011-09-13 27 views
6

जब मैंने System.Net.Mail का उपयोग करके एक मेल भेजा, ऐसा लगता है कि संदेश तुरंत नहीं भेजते हैं। मेरे इनबॉक्स तक पहुंचने से पहले उन्हें एक या दो मिनट लगते हैं। एक बार जब मैं एप्लिकेशन छोड़ देता हूं, तो सभी संदेश सेकंड के भीतर प्राप्त होते हैं। क्या कोई मेल मेल बफर सेटिंग है जो SmtpClient को तुरंत संदेश भेजने के लिए मजबूर कर सकती है?System.Net.Mail और MailMessage संदेश भेजना तुरंत

public static void SendMessage(string smtpServer, string mailFrom, string mailFromDisplayName, string[] mailTo, string[] mailCc, string subject, string body) 
{ 
    try 
    { 
     string to = mailTo != null ? string.Join(",", mailTo) : null; 
     string cc = mailCc != null ? string.Join(",", mailCc) : null; 

     MailMessage mail = new MailMessage(); 
     SmtpClient client = new SmtpClient(smtpServer); 

     mail.From = new MailAddress(mailFrom, mailFromDisplayName); 
     mail.To.Add(to); 

     if (cc != null) 
     { 
      mail.CC.Add(cc); 
     } 

     mail.Subject = subject; 
     mail.Body = body.Replace(Environment.NewLine, "<BR>"); 
     mail.IsBodyHtml = true; 

     client.Send(mail); 
    } 
    catch (Exception ex) 
    { 
     logger.Error("Failure sending email.", ex); 
    } 

धन्यवाद,

मार्क

+0

क्या आप [भेजें] (http://msdn.microsoft.com/en-us/library/swas0fwc.aspx) या [SendAsync] (http://msdn.microsoft.com/en-us/library) का उपयोग कर रहे हैं /x5x13z6h.aspx)? क्या आप सीधे अपने ईमेल सर्वर या किसी अन्य एसएमटीपी सर्वर के माध्यम से भेज रहे हैं? – Rup

+0

ध्यान दें कि जब मैं खुद को एक ईमेल संदेश भेजता हूं तो यह लगभग तुरंत आता है, इसलिए यह smtp सर्वर नहीं है। भेजें का उपयोग कर – mservidio

+0

। मैंने अभी अपना सहायक तरीका जोड़ा है ... – mservidio

उत्तर

10

इस प्रयास करें, यदि आप DotNet 4.0 पर हैं

using (SmtpClient client = new SmtpClient(smtpServer)) 
{ 
    MailMessage mail = new MailMessage(); 
    // your code here. 

    client.Send(mail); 
} 

यह आपके client उदाहरण निपटान होगा, जिससे वह अपने एसएमटीपी सत्र लपेट के लिए एक QUIT प्रोटोकॉल तत्व के साथ।

यदि आप पहले के डॉटनेट संस्करण पर फंस गए हैं, तो अपने प्रोग्राम द्वारा भेजे जाने वाले प्रत्येक संदेश के लिए उसी SMTpClient इंस्टेंस का पुन: उपयोग करने की व्यवस्था करने का प्रयास करें।

बेशक, ध्यान रखें कि ई-मेल स्वाभाविक रूप से एक स्टोर-एंड-फॉरवर्ड सिस्टम है, और एसएमटीपी से रिसेप्शन में देरी के बारे में कुछ भी तुल्यकालिक (या यहां तक ​​कि औपचारिक रूप से अनुमानित नहीं) है।

+0

शानदार! उसने ऐसा किया। संभवतः आगे स्थगित कार्य है जिसे तुरंत तब तक निष्पादित नहीं किया जाता जब तक आप उल्लेख नहीं करते हैं। – mservidio

0

मैं ओली से सहमत हूं। अपने प्रश्न का उत्तर देने के लिए, नहीं, मुझे विश्वास नहीं है कि कोई भी बफर सेटिंग है जिसे आप किसी फ़ॉर्म के माध्यम से सेट कर सकते हैं।

आपके प्रश्न के बारे में भ्रमित करने वाला क्या है, आप कहते हैं कि संदेश आपके इनबॉक्स तक पहुंचने के लिए एक या दो मिनट का समय लेता है, लेकिन फिर यह कहने के लिए आगे बढ़ें कि जब आप स्वयं को भेजते हैं, तो वे तुरंत जाते हैं ... मेरा मानना ​​है कि आपका मतलब है आंतरिक रूप से, संदेश ठीक भेजते हैं और समस्या केवल बाहरी पते के लिए होती है। इस मामले में, ऐसा लगता है कि हो सकता है कि आपका ईमेल सर्वर बाहरी संदेशों के लिए बाध्य अन्य ईमेल के पीछे इन संदेशों को कतार दे रहा हो (जो सामान्य गतिविधि है)। किसी बाहरी साइट पर ईमेल के लिए एक या दो मिनट प्रतीक्षा करना प्रतीक्षा का लंबा नहीं है।

हालांकि, यह असंभव है, लेकिन क्या आपका एक्सचेंज सर्वर आउटगोइंग संदेशों को स्कैन करने के लिए सेट है?

+0

जब मैंने खुद को भेजने के लिए कहा, मेरा मतलब था कि जब मैं दृष्टिकोण में एक नया संदेश खोलता हूं और खुद को ईमेल करता हूं, तो यह तुरंत अपने इनबॉक्स में आता है।जब मैं ऊपर दिए गए कोड का उपयोग स्वयं ईमेल (उसी पते पर) भेजने के लिए कर रहा था, तो संदेश मेरे इनबॉक्स में दिखाई देने से पहले एक या दो मिनट लग रहा था। – mservidio

+0

यह अधिक समझ में आता है। मुझे नहीं लगता कि यह एक स्कैनिंग मुद्दा हो सकता है, शायद एक्सचेंज सर्वर पर रिले सेटिंग्स? – mutek

+0

उपरोक्त टिप्पणियां देखें। @ जेसन इस मुद्दे को और विस्तार से बताते हैं। – mservidio