.net

2010-03-18 10 views
13

में SmtpClient का उपयोग करके मेल भेजना मैं smtp क्लाइंट का उपयोग कर मेल भेजने में असमर्थ हूं। यहाँ कोड है:.net

SmtpClient client=new SmtpClient("Host"); 
client.Credentials=new NetworkCredential("username", "password"); 
MailMessage mailMessage = new MailMessage(); 
mailMessage.from="[email protected]"; 
mailMessage.To.Add("[email protected]"); 
mailMessage.body="body"; 
mailMessage.subject="subject"; 
client.Send(mailMessage); 

समस्या यह है कि जब मैं ASP.NET अनुप्रयोग में इस कोड का उपयोग, मैं किसी भी मेल प्राप्त नहीं है। जब एएसपीनेट में मैं मेल पता से नेटवर्कक्रेडेंशियल में दिए गए उपयोगकर्ता नाम में बदल जाता हूं, तो मुझे मेल प्राप्त होते हैं।

लेकिन सी # विंडोज़ एप्लिकेशन में, मैं ईमेल प्राप्त कर सकता हूं, भले ही प्रेषक का ईमेल पता मान्य न हो।

+0

यह सर्वर बनाम आपकी dev मशीन पर कॉन्फ़िगरेशन से संबंधित हो सकता है। – Nate

+0

आप फ़ील्ड में एक जीमेल पता का उपयोग कर रहे हैं। क्या आपने यह सुनिश्चित किया है कि सभी सेटिंग्स उनके निर्देशों के अनुसार सेट की गई हैं? –

उत्तर

1

इसका मतलब है कि आपका मेल सर्वर मेल-रिले की अनुमति नहीं देता है। आपका मेल सर्वर केवल आपको प्रमाणित ईमेल-आईडी से उपयोगकर्ता नाम के रूप में मेल भेजने की अनुमति देता है। आमतौर पर यह प्रमाणित किए गए मेल के अलावा अलग-अलग पहचान के रूप में भेजे जाने वाले मेल को रोकने के लिए किया जाता है।

+1

मेल सर्वर दोनों विंडोज़ के साथ ही एएसपी.NET एप्लिकेशन में समान है। और एएसपी.NET एप्लिकेशन के दूसरे पृष्ठ में भी वही कोड ठीक काम कर रहा है। यह एएसपी.नेट आवेदन के लॉगिन पेज में काम नहीं कर रहा है। समस्या क्या हो सकती है? –

+0

आपके आवेदन का प्रमाणीकरण मोड क्या है? कृपया अपनी समस्या परिदृश्य के आसपास अधिक जानकारी प्रदान करें .. –

+0

एएसपीनेट प्रमाणीकरण मोड में रूपों पर सेट है। –

0

इस प्रयास करें:

MailMessage mail = new MailMessage("emailfrom","emailto"); 

mail.From = new MailAddress("emailfrom"); 
mail.Subject = txtsbjct.Text; 
string Body = txtmsg.Text; 
mail.Body = Body; 

mail.IsBodyHtml = true; 
SmtpClient smtp = new SmtpClient(); 
smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address 
smtp.Credentials = new System.Net.NetworkCredential("youremail", "yourpassword"); 

smtp.EnableSsl = true; 
smtp.Send(mail); 
txtemail.Text = ""; 
txtmsg.Text = ""; 
txtsbjct.Text = ""; 
Label1.Text = "your email has been send"; 
mail = null; 
smtp = null; 
10

मैं पता लगा UseDefaultCredentials सेट करने से पहले SmtpClient साख संपत्ति की स्थापना = false का कारण बनता है कि साख पर ध्यान नहीं दिया है।

विफल:

SmtpClient smtp = new SmtpClient; 
smtp.Credentials = new NetworkCredential("user","pass"); 
smtp.UseDefaultCredentials = false; 

काम करता है:

SmtpClient smtp = new SmtpClient; 
smtp.UseDefaultCredentials = false; 
smtp.Credentials = new NetworkCredential("user","pass"); 

जाओ आंकड़ा।

+0

यह समझ में नहीं आता है क्योंकि दोनों कोड स्निपेट लगभग समान हैं। केवल अंतर यह है कि 'नेटवर्क क्रेडेंशियल' कक्षा का तात्कालिकता दूसरे स्निपेट में 'उपयोग' ब्लॉक के अंदर होता है। शायद यह एक अनपेक्षित साइड इफेक्ट है? –

+0

आपका सही है। और अनपेक्षित प्रभाव यह है कि आप WordDefaultCredentials = गलत सेट करने से पहले प्रमाण-पत्र सेटिंग करते हैं, यह वही होता है जो यह होता है। मैं पोस्ट संपादित करूंगा। – user3524983

+0

और अंततः मुझे web.config से काम करने वाले प्रमाण पत्र प्राप्त हुए। वाह! क्या दिन है। – user3524983

-2
void sendEmail(string strFrom 
         , string strTo 
         , string strSubject 
         , string strBody) 
    { 

     MailMessage objMailMessage = new MailMessage(); 
     System.Net.NetworkCredential objSMTPUserInfo = 
      new System.Net.NetworkCredential(); 
     SmtpClient objSmtpClient = new SmtpClient(); 

     try 
     { 
      objMailMessage.From = new MailAddress(strFrom); 
      objMailMessage.To.Add(new MailAddress(strTo)); 
      objMailMessage.Subject = strSubject; 
      objMailMessage.Body = strBody; 

      objSmtpClient = new SmtpClient("172.0.0.1"); /// Server IP 
      objSMTPUserInfo = new System.Net.NetworkCredential 
      ("User name", "Password","Domain"); 
      objSmtpClient.Credentials = objSMTPUserInfo; 
      objSmtpClient.UseDefaultCredentials = false; 
      objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 

      objSmtpClient.Send(objMailMessage); 
     } 
     catch (Exception ex) 
     { throw ex; } 

     finally 
     { 
      objMailMessage = null; 
      objSMTPUserInfo = null; 
      objSmtpClient = null; 
     } 
    } 
+3

आपकी त्रुटि हैंडलिंग वास्तव में एक बहुत ही खराब प्रथा है, क्योंकि आप स्टैक ट्रेस (सीएफ http://stackoverflow.com/a/730255/474763) खो रहे हैं ... इसके अलावा, इस मामले में, कैच क्लॉज को छोड़कर होगा वास्तव में – tsimbalar

+0

जाने का तरीका रहा है। यदि आप 'पकड़ें (अपवाद पूर्व)' और फिर इसे 'फेंकना' चाहते हैं, तो 'थ्रो एक्स' के बजाय 'फेंक' का उपयोग करें, और स्टैक ट्रेस बनाए रखा जाएगा। यह केवल उपयोगी है, हालांकि, आप अपवाद को दोबारा करने से पहले अन्य चीजें कर रहे हैं, जैसे लॉगिंग करना। इस मामले में, हालांकि, 'पकड़' खंड को पूरी तरह से छोड़कर वही प्रभाव पड़ा होगा। –

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

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