.NET में SmtpClient ऑब्जेक्ट के लिए उपयोगकर्ता नाम और पासवर्ड कैसे सेट करें?


160

मैं निर्माता के विभिन्न संस्करणों को देखता हूं, एक वेब से जानकारी का उपयोग करता है ।config, एक होस्ट निर्दिष्ट करता है, और एक होस्ट और पोर्ट। लेकिन मैं उपयोगकर्ता नाम और पासवर्ड को web.config से अलग कैसे सेट करूं? हमारे पास ऐसा मुद्दा है जहां हमारे आंतरिक smtp को कुछ उच्च सुरक्षा ग्राहकों द्वारा अवरुद्ध किया गया है और हम उनके smtp सर्वर का उपयोग करना चाहते हैं, क्या web.config के बजाय कोड से ऐसा करने का कोई तरीका है?

इस मामले में, उदाहरण के लिए, यदि कोई भी डेटाबेस से उपलब्ध नहीं है, तो मैं वेब का उपयोग कैसे करूंगा।

public static void CreateTestMessage1(string server, int port)
{
    string to = "jane@contoso.com";
    string from = "ben@contoso.com";
    string subject = "Using the new SMTP client.";
    string body = @"Using this new feature, you can send an e-mail message from an application very easily.";
    MailMessage message = new MailMessage(from, to, subject, body);
    SmtpClient client = new SmtpClient(server, port);
    // Credentials are necessary if the server requires the client 
    // to authenticate before it will send e-mail on the client's behalf.
    client.Credentials = CredentialCache.DefaultNetworkCredentials;

    try {
        client.Send(message);
    }
    catch (Exception ex) {
        Console.WriteLine("Exception caught in CreateTestMessage1(): {0}", 
                    ex.ToString());
    }              
}

जवाबों:


301

SmtpClient कोड द्वारा उपयोग किया जा सकता है:

SmtpClient mailer = new SmtpClient();
mailer.Host = "mail.youroutgoingsmtpserver.com";
mailer.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword");

अगर मैं एक सेट नहीं करता हूं तो क्या यह डिफ़ॉल्ट रूप से web.config से लोगों का उपयोग करेगा?
मेघमाता

3
@pipelinecache रयान सही है, अगर कोई साख आपूर्ति नहीं करता है, तो यह <system.net> <mailSettings> web.config
Tomas

1
मेरा मानना ​​है कि अगर UseDefaultCredentialsयह सच है तो यह चूक का उपयोग करेगा, अन्यथा यह पहले Credentialsसंपत्ति में और फिर वेब में दिखाई देगा । यदि कोई भी सेट नहीं किया जाता है तो यह गुमनाम रूप से ईमेल भेजेगा।
द गेटकीपर

1
क्या c # कोड में हार्ड कोड यूजरनेम और पासवर्ड सुरक्षित है?
kudlatiger

3
चेतावनी: यदि आप 'UseDefaultCredentials = false' सेट करते हैं, तो आपको इसे क्रेडेंशियल सेट करने से पहले करना होगा, क्योंकि परिवर्तन किसी भी मौजूदा क्रेडेंशियल्स को सेट करता है।
WhoIsRich

26

उपयोग NetworkCredential

हां, बस इन दो लाइनों को अपने कोड में जोड़ें।

var credentials = new System.Net.NetworkCredential("username", "password");

client.Credentials = credentials;

4
सिर्फ एक लाइन क्यों नहीं?
JSON

7
SmtpClient MyMail = new SmtpClient();
            MailMessage MyMsg = new MailMessage();
            MyMail.Host = "mail.eraygan.com";
            MyMsg.Priority = MailPriority.High;
            MyMsg.To.Add(new MailAddress(Mail));
            MyMsg.Subject = Subject;
            MyMsg.SubjectEncoding = Encoding.UTF8;
            MyMsg.IsBodyHtml = true;
            MyMsg.From = new MailAddress("username", "displayname");
            MyMsg.BodyEncoding = Encoding.UTF8;
            MyMsg.Body = Body;
            MyMail.UseDefaultCredentials = false;
            NetworkCredential MyCredentials = new NetworkCredential("username", "password");
            MyMail.Credentials = MyCredentials;
            MyMail.Send(MyMsg);

4
आपको उत्तर के लिए केवल सापेक्ष कोड पोस्ट करने की कोशिश करनी चाहिए
जॉनी 5

1
@ johnny5 संदर्भ दुनिया में सबसे बड़ा अपराध नहीं है
शिव

@ शशि आप सही हैं, लेकिन एक संदर्भ उत्तर की व्याख्या लिख ​​रहा होगा, जो यहां भी नहीं है।
जॉनी 5

1
@ johnny5 के अन्य शीर्ष उत्तरों में स्पष्टीकरण नहीं है - उदाहरण बहुत ही आत्म व्याख्यात्मक है क्योंकि कोड स्वयं दस्तावेजीकरण है।
शिव

@ शीर्ष उत्तर स्व दस्तावेज हैं क्योंकि वे केवल प्रासंगिक कोड पोस्ट करते हैं। मेरी मूल टिप्पणी में इस उत्तर के रूप में केवल कई upvotes हैं, एक कारण के लिए, मैं यह नहीं देखता कि मुझे कोड की 15 पंक्तियों को क्यों उठाना होगा, जब इस प्रश्न का उत्तर देने के लिए केवल 2 की आवश्यकता होती है, यदि आपको यह उत्तर उपयोगी लगता है इसे बढ़ाओ। अन्यथा, 2 साल पहले की गई एक टिप्पणी के बारे में बहस करने का कोई मतलब नहीं है जो अन्य उपयोगी थी
जॉनी 5

-2

चूंकि मेरे सभी ग्राहक प्रमाणीकृत SMTP खातों का उपयोग नहीं करते हैं, इसलिए मैंने SMTP खाते का उपयोग करने का केवल तभी उपयोग किया है, जब एप्लिकेशन कुंजी मान web.config फ़ाइल में दिए गए हों।

यहाँ VB कोड है:

sSMTPUser = ConfigurationManager.AppSettings("SMTPUser")
sSMTPPassword = ConfigurationManager.AppSettings("SMTPPassword")

If sSMTPUser.Trim.Length > 0 AndAlso sSMTPPassword.Trim.Length > 0 Then
    NetClient.Credentials = New System.Net.NetworkCredential(sSMTPUser, sSMTPPassword)

    sUsingCredentialMesg = "(Using Authenticated Account) " 'used for logging purposes
End If

NetClient.Send(Message)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.