.NET'te SmtpClient nesnesi için kullanıcı adı ve parola nasıl ayarlanır?


161

Yapıcının farklı sürümlerini görüyorum, biri web.config'den bilgi kullanıyor, biri ana bilgisayarı, diğeri ise ana bilgisayarı ve bağlantı noktasını belirliyor. Ancak kullanıcı adını ve şifreyi web.config dosyasından farklı bir şeye nasıl ayarlayabilirim? Dahili smtp'mizin bazı yüksek güvenlikli istemciler tarafından engellenmesi sorunu var ve smtp sunucularını kullanmak istiyoruz, bunu web.config yerine koddan yapmanın bir yolu var mı?

Bu durumda, örneğin veritabanından hiçbiri yoksa web.config kimlik bilgilerini nasıl kullanırım?

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());
    }              
}

Yanıtlar:


303

SmtpClient kodu ile kullanılabilir:

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

bir tane ayarlamazsam, varsayılan olarak web.config dosyasından birini kullanır mı?
CloudMeta

3
@pipelinecache Ryan haklıdır, eğer herhangi bir kimlik bilgisi verilmezse web.config dosyasındaki <system.net> <mailSettings> 'e bakacaktır
Tomas

1
Eğer UseDefaultCredentialsdoğru olarak ayarlanırsa varsayılanları kullanacağına inanıyorum , aksi takdirde önce Credentialsözelliğe sonra da web.config dosyasına bakacaktır . Hiçbiri ayarlanmazsa, e-postayı anonim olarak gönderir.
TheGateKeeper

1
C # kodunda sabit kod kullanıcı adı ve şifresi güvenli midir?
kudlatiger

3
Uyarı: 'UseDefaultCredentials = false' değerini ayarlarsanız, değişiklik var olan herhangi bir kimlik bilgisini değiştirmediğinden Kimlik Bilgilerini ayarlamadan ÖNCE bunu yapmanız gerekir.
WhoIsRich

27

kullanım NetworkCredential

Evet, sadece bu iki satırı kodunuza ekleyin.

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

client.Credentials = credentials;

4
neden sadece bir satır değil?
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
cevaba sadece ilgili kodu göndermeyi denemelisiniz
johnny 5

1
@ johnny5 bağlamı dünyanın en büyük suçu değil
Shiv

@shiv haklısınız, ancak bir bağlam, cevabın bir açıklamasını yazıyor olacak, bu da burada değil.
johnny 5

1
@ johnny5 diğer en iyi cevapların açıklamaları yoktur - kod kendi kendini belgelediği için örnek oldukça açıklayıcıdır.
Shiv

@Shiv en iyi cevapları kendi belgelendiriyor çünkü sadece ilgili kodu yayınlıyorlar. Orijinal yorumumda bu cevap kadar çok oy var, bir nedenle, bu soruyu yararlı bulursanız, neden bu soruyu cevaplamak için sadece 2 gerektiğinde 15 kod satırını neden elemek zorunda kaldığımı görmüyorum, oy verin. Aksi takdirde, 2 yıl önce yaptığım bir yorum hakkında tartışmanın bir anlamı yok, diğer hangi yararlı bulundu
johnny 5

-2

Tüm istemcilerim kimliği doğrulanmış SMTP hesapları kullanmadığından, yalnızca uygulama anahtarı değerleri web.config dosyasında sağlanıyorsa SMTP hesabını kullanmaya başvurdum.

İşte VB kodu:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.