.NET- এ কীভাবে SmtpClient অবজেক্টের জন্য ব্যবহারকারীর নাম এবং পাসওয়ার্ড সেট করবেন?


160

আমি কনস্ট্রাক্টরের বিভিন্ন সংস্করণ দেখতে পাচ্ছি, একটি ওয়েবকনফিগের তথ্য ব্যবহার করে, একটি হোস্টকে নির্দিষ্ট করে এবং একটি হোস্ট এবং পোর্ট port তবে আমি কীভাবে ব্যবহারকারীর নাম এবং পাসওয়ার্ডটিকে ওয়েব কোডফাইগ থেকে আলাদা কিছুতে সেট করব? আমাদের ইস্যুটি রয়েছে যেখানে আমাদের অভ্যন্তরীণ এসএমটিপি কিছু উচ্চ সুরক্ষা ক্লায়েন্ট দ্বারা অবরুদ্ধ করা হয়েছে এবং আমরা তাদের এসএমটিপি সার্ভারটি ব্যবহার করতে চাই, ওয়েবকনফিগের পরিবর্তে কোড থেকে এটি করার কোনও উপায় আছে কি?

এই ক্ষেত্রে উদাহরণস্বরূপ, ডাটাবেস থেকে যদি কিছু না পাওয়া যায় তবে আমি কীভাবে ওয়েবকনফিগ শংসাপত্রগুলি ব্যবহার করব?

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");

যদি আমি সেট না করে থাকি তবে এটি কি ওয়েবকনফিগ থেকে ডিফল্টরূপে ব্যবহার করবে?
ক্লাউডমেটা

3
@ পিপিলিনেচে রায়ান ঠিক আছে, যদি কোনও শংসাপত্র সরবরাহ না করা হয় তবে এটি ওয়েবকনফিগের <সিস্টেমেটনেট << মেলসেটেটিংস>
টমাস

1
আমি বিশ্বাস করি যদি UseDefaultCredentialsএটি সত্য হিসাবে সেট করা থাকে তবে এটি ডিফল্ট ব্যবহার করবে, অন্যথায় এটি প্রথমে Credentialsসম্পত্তি এবং তারপরে ওয়েবকনফাইগে সন্ধান করবে। যদি কোনওটি সেট না করা থাকে তবে এটি বেনামে ইমেলটি প্রেরণ করবে।
দিগেটকিপার

1
হার্ড কোড ব্যবহারকারীর নাম এবং পাসওয়ার্ড সি # কোডে কি নিরাপদ?
কুডলটিগার

3
সতর্কতা: আপনি যদি 'UseDefaultCredentials = মিথ্যা' সেট করেন তবে অবশ্যই শংসাপত্রগুলি সেট করার আগে অবশ্যই তা করা উচিত, কারণ পরিবর্তনটি কোনও বিদ্যমান শংসাপত্রগুলি সেটকে বাতিল করে দেয়।
WHIsRich

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
@ জননি 5 প্রসঙ্গটি বিশ্বের বৃহত্তম অপরাধ নয়
শিব ২

@ শিব আপনি সঠিক, তবে একটি প্রসঙ্গে উত্তরটির ব্যাখ্যা লিখতে হবে, যা এখানেও নেই।
জননি 5

1
@ জননি 5 অন্যান্য শীর্ষ উত্তরের ব্যাখ্যা নেই - উদাহরণটি স্ব স্ব বর্ণনামূলক কারণ কোডটি স্ব ডকুমেন্টিং।
শিব

@ শিভ শীর্ষ উত্তরগুলি স্ব নথিভুক্ত কারণ তারা কেবলমাত্র প্রাসঙ্গিক কোড পোস্ট করে। আমার মূল মন্তব্যে এই উত্তরটির মতোই অনেকগুলি সমালোচনা রয়েছে, কারণ হিসাবে, আমি কেন দেখতে পাচ্ছি না কেন আমাকে 15 লাইন কোড থাকা সত্ত্বেও এই প্রশ্নের উত্তর দেওয়ার জন্য যখন কেবল 2 টি প্রয়োজন, যদি আপনি এই উত্তরটি দরকারী বলে খুঁজে পান, এটি upvote। অন্যথায়, 2 বছর আগে আমি যে মন্তব্যটি দিয়েছিলাম তাতে অন্য যেগুলি দরকারী ছিল তা নিয়ে বিতর্ক করার কোনও অর্থ নেই
জননি 5

-2

যেহেতু আমার সমস্ত ক্লায়েন্ট প্রমাণীকৃত এসএমটিপি অ্যাকাউন্ট ব্যবহার করে না, তাই আমি এসএমটিপি অ্যাকাউন্টটি তখনই ব্যবহার করতে শুরু করি যখন অ্যাপ্লিকেশন কী মানগুলি ওয়েলকনফাইগ ফাইলে সরবরাহ করা হয়।

এখানে ভিবি কোডটি দেওয়া হয়েছে:

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.